質問

FirstName、LastName、Emailの3つのフィールドを持つテーブルがあります。

ここにいくつかのダミーデータがあります:

FirstName | LastName | Email
Adam        West       adam@west.com
Joe         Schmoe     NULL

今、私がそうするなら:

SELECT CONCAT(FirstName, LastName, Email) as Vitals FROM MEMBERS

単一のnullフィールドがあるため、Joeのバイタルはnullです。この振る舞いをどのように克服しますか?また、これは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 <!> lt; space <!> gt; lastが必要な場合、firstがnullの場合は最後になります:

ISNULL(FirstName+' ','') + ISNULL(LastName,'')

firstnameにnullの可能性のあるスペースを追加しました。つまり、FirstNameに値がある場合にのみスペースが存続することを意味します。

それらをすべてスペースで区切ってまとめるには:

RTRIM(ISNULL(Firstname+' ','') + ISNULL(LastName+' ','') + ISNULL(Email,''))

いつでもCONCAT_NULL_YIELDS_NULL設定を使用できます。

単にSET CONCAT_NULL_YIELDS_NULL OFFを実行すると、すべてのnull連結はnullではなくテキストになります。

ステファンの答えは正しいです。 少し詳しく調べるには、NULLがNothingと同じではないことを知る必要があります。 Nullは、値がないこと、つまり定義されていないことを表します。実際には値である空の文字列を表すものはありません。

未定義+何でも=未定義

保持するのに適したデータベースのヒント!

取得した場合(MySQLでのように):

#1582 - Incorrect parameter count in the call to native function 'ISNULL'

ISNULL関数をCOALESCEに置き換えることができます:

CONCAT(COALESCE(FirstName,''),COALESCE(LastName,''),COALESCE(Email,''))

MS SQL Server 2012以降、CONCAT関数が導入されました および MSDNに従って

  

ヌル値は暗黙的に空の文字列に変換されます。すべての場合   引数がnullの場合、varchar(1)型の空の文字列が返されます。

したがって、IsNullなしでCONCATを使用するだけで十分です

CONCAT(FirstName, LastName, 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 Accessの場合

Option 1)SELECT(FirstName + <!> quot; <!> quot; + LastName + <!> quot; <!> quot; + Email)as Vitals FROM MEMBERS nullのフィールドの場合、結果は空白になります。

オプション2)SELECT(FirstName <!> amp; <!> quot; <!> quot; <!> amp; LastName <!> amp; <!> quot; <!> quot; <!> amp;メール)メンバーからのバイタルとして nullのフィールドの代わりにスペースを取得します。

この質問に対する回答を確認した後、それらすべてを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))

したがって、要するに、CONCAT_WSを使用してフィールドを連結し、,で区切ります。 NULLフィールドもEMPTYも連結されないことに注意してください

NULLIF は、フィールドがNOT NULLまたは<=>であるかどうかを確認します。フィールドはスペースのみを含むか、空でもあります。例: ''、 '')、出力は<=>または<=>

のいずれか

IF フィールドが<=>または<=>

でない場合、フィールドに出力します
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top