MySQL łączy dwie kolumny w jedną


106

Próbuję znaleźć sposób na połączenie dwóch kolumn w jedną, ale zamiast tego otrzymuję wartość „0” w kolumnie zamiast kombinacji słów.

Oto, czego próbowałem, a także inne:

SELECT column1 + column2 AS column3
FROM table;

SELECT column1 || column2 AS column3
FROM table;

SELECT column1 + ' ' + column2 AS column3
FROM table;

Czy ktoś mógłby mi powiedzieć, co robię źle?


1
Z jakiej bazy danych korzystasz? Jakie są typy tych dwóch kolumn?
Gordon Linoff,



Użyj rozwiązania najlepszej odpowiedzi, ale dodaj rurkę. select concat (kolumna1, „|”, kolumna2). Pomaga w późniejszych osiągnięciach
Cosmic Hawk

Odpowiedzi:


167

Domyślam się, że używasz MySQL, w którym +operator dodaje, wraz z cichą konwersją wartości na liczby. Jeśli wartość nie zaczyna się od cyfry, to przekonwertowana wartość to 0.

Więc spróbuj tego:

select concat(column1, column2)

Dwa sposoby dodania spacji:

select concat(column1, ' ', column2)
select concat_ws(' ', column1, column2)

używam sql server 2005i daje mi to błąd, jakIncorrect syntax near ')'.
hud

5
@coder. . . To pytanie jest oznaczone jako „mysql”. Jeśli masz pytanie dotyczące programu SQL Server, zadaj je jako pytanie, a nie w komentarzu.
Gordon Linoff

Działa również dla T-SQL, doskonałe i proste rozwiązanie. Zmniejsza dwie kolumny w jedną.
Ryan Battistone

23

Spróbuj tego, to działa dla mnie

select (column1 || ' '|| column2) from table;

1
To wygląda jak Oracle.
Coburne

To działało również w przypadku łączenia wielu (więcej niż 2) kolumn. Thx
Kayathiri

Standard SQL udostępnia funkcję CONCAT () do łączenia dwóch ciągów w jeden ciąg. Jednak SQLite nie obsługuje funkcji CONCAT (). Zamiast tego używa operatora konkatenacji (||), aby połączyć dwa ciągi w jeden.
PaulH


5

To jedyne rozwiązanie, które by się sprawdziło, gdy potrzebowałem spacji między scalanymi kolumnami.

select concat(concat(column1,' '), column2)

3

Dla fanów MySQL podoba mi się ta IFNULL()funkcja. Inne odpowiedzi sugerują podobną funkcjonalność z ISNULL()funkcją w niektórych implementacjach. W mojej sytuacji mam kolumnę opisów, która jest NOT NULL, oraz kolumnę numerów seryjnych, która może być. NULLOto jak je połączyłem w jedną kolumnę:

SELECT CONCAT(description,IFNULL(' SN: ', serial_number),'')) FROM my_table;

Moje wyniki sugerują, że wyniki konkatenacji ciągu z NULLwynikami w a NULL. W tych przypadkach uzyskiwałem alternatywną wartość.


3

Jeśli pracujesz, to Oracle:

SELECT column1 || column2 AS column3
FROM table;

LUB

Jeśli pracujesz na MySql, to:

SELECT Concat(column1 ,column2) AS column3
FROM table;

1

Używałem tego sposobu i jest najlepszy na zawsze. W tym kodzie obsłużono również null

SELECT Title,
FirstName,
lastName, 
ISNULL(Title,'') + ' ' + ISNULL(FirstName,'') + ' ' + ISNULL(LastName,'') as FullName 
FROM Customer

Spróbuj tego...



0
SELECT Collumn1 + ' - ' + Collumn2 AS 'FullName' FROM TableName                              

Prosty sposób na połączenie
Ravin
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.