FirstName、LastName、Emailの3つのフィールドを持つテーブルがあります。
ダミーデータを次に示します。
FirstName | LastName | Email
Adam West [email protected]
Joe Schmoe NULL
今、私がそうするなら:
SELECT CONCAT(FirstName, LastName, Email) as Vitals FROM MEMBERS
単一のヌルフィールドがあるため、ジョーのバイタルはヌルです。この振る舞いをどのように克服しますか?また、これはMS SQL Serverのデフォルトの動作ですか?
試して
ISNULL(FirstName, '<BlankValue>') -- In SQL Server
IFNULL(Firstname, '<BlankValue>') -- In MySQL
そう、
CONCAT(ISNULL(FirstName,''),ISNULL(LastName,''),ISNULL(Email,'')) -- In SQL Server
CONCAT(IFNULL(FirstName,''),IFNULL(LastName,''),IFNULL(Email,'')) -- In MySQL
nullの問題(およびnullが存在するはずの空白文字列)なしで同じものを返します。
見る CONCAT_WS
例えば:
CONCAT_WS('',NULL,"TEST STRING","TEST STRING 2")
利回り
TEST STRINGTEST STRING 2
これは、すべての周りにIFNULL
を構築するよりも簡単です。空の文字列をセパレータとして使用できます。
Mysqlでは、isnullはしばらく動作しません。 IFNULL()を試してください。
CONCAT(IFNULL(FirstName,''),IFNULL(LastName,''),IFNULL(Email,''))
SELECT ISNULL(FirstName,'')+ISNULL(LastName,'')+ISNULL(Email,'') as Vitals FROM MEMBERS
をお勧めしますが、CONCATに本当に夢中になっている場合は、{fn}でラップし、ODBC関数を次のように使用できます。
SELECT {fn CONCAT(ISNULL(FirstName,''), ISNULL(LastName,''), ISNULL(Email,''))} as Vitals FROM MEMBERS
First <space> lastが必要で、firstがnullのときに最後が必要な場合、これを行うことができます。
ISNULL(FirstName+' ','') + ISNULL(LastName,'')
Nullの可能性のあるfirstnameにスペースを追加しました。つまり、FirstNameに値がある場合にのみスペースが存続することを意味します。
それらをすべてスペースで区切ってまとめるには:
RTRIM(ISNULL(Firstname+' ','') + ISNULL(LastName+' ','') + ISNULL(Email,''))
CONCAT_NULL_YIELDS_NULL
設定をいつでも使用できます。
単にSET CONCAT_NULL_YIELDS_NULL OFF
を実行すると、すべてのnull
連結はnullではなくテキストになります。
ステファンの答えは正しいです。少し詳しく調べるには、NULLがNothingと同じではないことを知る必要があります。 Nullは、値がないこと、つまり定義されていないことを表します。 IS実際には値です。空の文字列を表すものはありません。
未定義+何でも=未定義
保持する良いデータベースのヒント!
取得した場合(MySQLでのように):
#1582 - Incorrect parameter count in the call to native function 'ISNULL'
ISALE関数をCOALESCEに置き換えることができます:
CONCAT(COALESCE(FirstName,''),COALESCE(LastName,''),COALESCE(Email,''))
SQL ServerにはCONCAT
関数がありません。
(更新:MS SQL Server 2012以降 CONCAT関数が導入されました )
SQL Serverのデフォルトの動作では、NULLは式を介して伝播します。
SQL Serverでは、次のように記述します。
SELECT FirstName + LastName + Email as Vitals FROM MEMBERS
NULL
sを処理する必要がある場合:
SELECT ISNULL(FirstName, '') + ISNULL(LastName, '') + ISNULL(Email, '') as Vitals FROM MEMBERS
MS SQL Server 2012以降、CONCAT関数と MSDNによる が導入されました
NULL値は暗黙的に空の文字列に変換されます。すべての引数がヌルの場合、varchar(1)型の空の文字列が返されます。
したがって、IsNullなしでCONCATを使用するだけで十分です。
CONCAT(FirstName, LastName, Email)
MS Accessの場合
オプション1)メンバーからのバイタルとしてSELECT(FirstName + "" + LastName + "" +メール).
オプション2)メンバーからのバイタルとしてSELECT(FirstName& ""&LastName& ""&Email).
この質問に対する答えを観察した後、それらすべてを1つの簡単なソリューションにまとめることができます
CONCAT_WS(',',
IF(NULLIF(FirstName, '') IS NULL, NULL, FirstName),
IF(NULLIF(LastName, '') IS NULL, NULL, usr_lastname),
IF(NULLIF(Email, '') IS NULL, NULL, Email))
So、要するにCONCAT_WS
を使用してフィールドを連結し、,
で区切るNULL
フィールドもEMPTY
も連結されないことに注意してください
[〜#〜] nullif [〜#〜]は、フィールドがNULL
またはEMPTY
であるかどうかを確認します。フィールドはスペースのみを含むか、空でもあります。例: ''、 '')、出力はNULL
またはNOT NULL
のいずれかになります
[〜#〜] if [〜#〜]NULL
またはEMPTY
でない場合、フィールドを出力します