-2

私が使用している DBMS は MySQL です。

ここにテーブルがあります:

                    AUTHOR
author_id | first_name | last_name | patronymic
-----------------------------------------------
     1    | John       | Bush      | NULL
     2    | Sergey     | Burov     | Romanovich
     3    | NULL       | Filin     | NULL

このクエリを発行すると:

SELECT author_id,
       CONCAT(first_name, ' ', last_name,  ' ', patronymic) AS full_name
FROM   author;

出力は次のようになります。

author_id | full_name
-----------------------------------
     1    | NULL
     2    | Sergey Burov Romanovich
     3    | NULL

したがって、例からわかるように、フィールドに NULL 値がある場合、連結プロセス中に全体が NULL に設定されます。MySQL で NULL 値を長さ 0 の文字列に変換する方法、または NULL 値をまったく連結しないようにする方法を説明してください。

よろしくお願いします。

4

4 に答える 4

5

セパレータを使用して文字列を連結し、null 値をスキップするCONCAT_WSを使用できます。

SELECT author_id,
       CONCAT_WS(' ', first_name, last_name,  patronymic) AS full_name
FROM   author;

ここでフィドルを参照してください。

于 2013-04-08T14:18:31.377 に答える
0
SELECT author_id,
   CONCAT(ifnull(first_name,''), ' ', ifnull(last_name,''),  ' ', ifnull(patronymic,'')) AS full_name FROM   author;
于 2013-04-08T14:21:22.427 に答える
0

これはあなたの質問に直接答える方法です:

SELECT author_id,
       CONCAT(ISNULL(first_name,''), ' ', 
              ISNULL(last_name,''),  ' ',
              ISNULL(patronymic,'')) AS full_name
FROM author;

またはこれ(ミドルネームがnullのダブルスペースの問題を解決します):

SELECT author_id,
       CONCAT(ISNULL(CONCAT(first_name,' '),''), 
              ISNULL(CONCAT(last_name,' '),''),
              ISNULL(patronymic,'')) AS full_name
FROM author;

しかし、これは本当の質問に答えます-この状況または少し複雑な状況で適切な書式設定を行うための最良の解決策:

SQL の FirstName、LastName は複雑すぎますか?

于 2013-04-08T14:17:43.487 に答える
0

すべての列でa を使用して、COALESCEnull を返さないことを保証します (値を返すか、空の文字列を返すことにより)。

于 2013-04-08T14:17:48.660 に答える