80

このソリューションを使用して、データをエクスポートするときに列名に名前を付けるために SELECT As を使用して csv ファイルに出力する MySQL クエリの一部として COALESCE を使用しようとしました。

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

First_Name、Last_Name、Contact_Phone の 3 つの列が必要でした

First_Name、Last_Name、ContactPhoneAreaCode1、ContactPhoneNumber1、および Contact_Phone の 5 つの列を取得しています。

ContactPhoneAreaCode1 と ContactPhoneNumber1 を Contact_Phone の 1 つの列にマージしたことを、クエリ内から非表示にするにはどうすればよいですか?

4

4 に答える 4

166

両方の列に を含めることができるがNULL、それらを 1 つの文字列にマージしたい場合、最も簡単な解決策はCONCAT_WS()を使用することです。

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

NULLこのようにして、各列の -ness を個別にチェックする必要はありません。

または、両方の列が実際に として定義されている場合NOT NULLCONCAT()で十分です。

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

に関してはCOALESCE、少し異なります。引数のリストが与えられると、そうでない最初のものを返しますNULL

于 2013-09-17T21:35:08.293 に答える
10

ContactPhoneAreaCode1 と ContactPhoneNumber1 をリストする必要はありません

SELECT FirstName AS First_Name, 
LastName AS Last_Name, 
COALESCE(ContactPhoneAreaCode1, ContactPhoneNumber1) AS Contact_Phone 
FROM TABLE1
于 2013-09-17T21:36:55.140 に答える
7

CONCAT で使用するために列を個別に選択する必要はありません。それらを削除するだけで、クエリは次のようになります。

SELECT FirstName AS First_Name
     , LastName AS Last_Name
     , CONCAT(ContactPhoneAreaCode1, ContactPhoneNumber1) AS Contact_Phone 
  FROM TABLE1
于 2013-09-17T21:34:51.730 に答える
2

NULL列の場合、IF次の 2 つの関数を組み合わせたこのような句CONCATを使用することをCOALESCEお勧めします。

SELECT FirstName , LastName , 
IF(FirstName IS NULL AND LastName IS NULL, NULL,' _ ',CONCAT(COALESCE(FirstName ,''), COALESCE(LastName ,''))) 
AS Contact_Phone FROM   TABLE1
于 2016-01-20T14:15:07.843 に答える