MySQL SELECT AS поєднує два стовпці в один


76

Використовуючи це рішення , я спробував використати COALESCE як частину запиту MySQL, який виводиться у файл CSV за допомогою SELECT As для іменування імен стовпців під час експорту даних.

SELECT FirstName AS First_Name
     , LastName AS Last_Name
     , ContactPhoneAreaCode1
     , ContactPhoneNumber1
     , COALESCE(ContactPhoneAreaCode1, ContactPhoneNumber1) AS Contact_Phone 
  FROM TABLE1

Я хотів 3 стовпці: Ім'я, Прізвище та Контакт_Телефон

Я отримую 5 стовпців: Ім'я, Прізвище, ContactPhoneAreaCode1, ContactPhoneNumber1 і Contact_Phone

Як приховати злиття ContactPhoneAreaCode1, ContactPhoneNumber1 в одному стовпці для Contact_Phone зсередини запиту?


2
Просто залиште стовпці, які ви не хочете бачити, у своєму запиті.
Райан,

4
COALESCEповертає перше ненульове поле. Отже, якщо ContactPhoneAreaCode1 не має значення null, то Contact_Phone буде дорівнювати ContactPhoneAreaCode1. Ви хочете скористатися функцієюCONCAT
chrislondon

Відповіді:


150

Якщо обидва стовпці можуть містити NULL, але ви все одно хочете об’єднати їх в один рядок, найпростішим рішенням є використання CONCAT_WS () :

SELECT FirstName AS First_Name
     , LastName AS Last_Name
     , CONCAT_WS('', ContactPhoneAreaCode1, ContactPhoneNumber1) AS Contact_Phone 
  FROM TABLE1

Таким чином вам не доведеться перевіряти наявність NULLкожної колонки окремо.

Як варіант, якщо обидва стовпці насправді визначені як NOT NULL, CONCAT () буде цілком достатньо:

SELECT FirstName AS First_Name
     , LastName AS Last_Name
     , CONCAT(ContactPhoneAreaCode1, ContactPhoneNumber1) AS Contact_Phone 
  FROM TABLE1

Що стосується COALESCE, це трохи інший звір: з огляду на список аргументів, він повертає перше, що не є NULL.


Як можна вставити пробіли всередину CONCAT_WS? Додавання ' 'не працює.
Pathros

Прекрасно працює в терміналі, перевірте, як запит передається на MySQL Server і як обробляються результати.
raina77ow

1
Ага, так. Дякую. Я встановлював пробіл ' 'не на початку, а між стовпцями :-P
Патрос

8

Вам не потрібно перераховувати ContactPhoneAreaCode1 та ContactPhoneNumber1

SELECT FirstName AS First_Name, 
LastName AS Last_Name, 
COALESCE(ContactPhoneAreaCode1, ContactPhoneNumber1) AS Contact_Phone 
FROM TABLE1

6

Вам не потрібно виділяти стовпці окремо, щоб використовувати їх у своєму CONCAT. Просто видаліть їх, і ваш запит стане:

SELECT FirstName AS First_Name
     , LastName AS Last_Name
     , CONCAT(ContactPhoneAreaCode1, ContactPhoneNumber1) AS Contact_Phone 
  FROM TABLE1

2
Я думаю, ти хочеш CONCAT
Кріслондон

2

У випадку NULLстовпців краще використовувати такий IFречення, яке поєднує дві функції: CONCATі COALESCEі використовує спеціальні символи між стовпцями в результаті, як пробіл або '_'

SELECT FirstName , LastName , 
IF(FirstName IS NULL AND LastName IS NULL, NULL,' _ ',CONCAT(COALESCE(FirstName ,''), COALESCE(LastName ,''))) 
AS Contact_Phone FROM   TABLE1
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.