61

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 フィールドが 1 つあるため、Joe のバイタルは null です。この行動をどのように克服しますか?また、これは MS SQL Server のデフォルトの動作ですか?

4

11 に答える 11

125

試す

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があるはずの空白の文字列)。

于 2009-06-23T23:40:45.687 に答える
72

見るCONCAT_WS

例えば:

CONCAT_WS('',NULL,"TEST STRING","TEST STRING 2")

収量

TEST STRINGTEST STRING 2

IFNULLこれは、すべてを中心に構築するよりも簡単です。空の文字列を区切り文字として使用できます。

于 2011-04-26T15:33:36.707 に答える
12

mysqlではisnullはしばらくは機能しません。IFNULL()を試してください。

CONCAT(IFNULL(FirstName,''),IFNULL(LastName,''),IFNULL(Email,''))
于 2011-03-25T13:55:24.183 に答える
6
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のときにlastが必要な場合は、次のように実行できます。

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

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

それらすべてをそれぞれの間にスペースを入れてまとめるには:

RTRIM(ISNULL(Firstname+' ','') + ISNULL(LastName+' ','') + ISNULL(Email,''))
于 2009-06-24T00:26:26.530 に答える
5

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

実行するだけでSET CONCAT_NULL_YIELDS_NULL OFF、すべてのnull連結はnullではなくテキストになります..

于 2009-06-24T11:35:14.907 に答える
4

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

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

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

CONCAT(COALESCE(FirstName,''),COALESCE(LastName,''),COALESCE(Email,''))
于 2013-07-19T16:22:56.203 に答える
3

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

未定義 + なんでも = 未定義

保持するための良いデータベースのヒント!

于 2009-06-23T23:43:43.683 に答える
3

MS SQL Server 2012 から、CONCAT 関数が導入され、MSDN によると

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

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

CONCAT(FirstName, LastName, Email)
于 2016-05-05T04:23:41.833 に答える
2

SQL Server には機能がありませんCONCAT
(更新: MS SQL Server 2012 からCONCAT 関数が導入されました)

デフォルトの SQL Server の動作では、NULL は式を通じて伝達されます。

SQL Server では、次のように記述します。

SELECT FirstName + LastName + Email as Vitals FROM MEMBERS

sを処理する必要がある場合NULL:

SELECT ISNULL(FirstName, '') + ISNULL(LastName, '') + ISNULL(Email, '') as Vitals FROM MEMBERS
于 2009-06-23T23:44:02.917 に答える
1

MS Accessの場合

オプション 1) SELECT (FirstName + " " + LastName + " " + Email) as Vitals FROM MEMBERS ヌルのフィールドの場合、空白の結果が返されます。

オプション 2) SELECT (FirstName & " " & LastName & " " & Email) as Vitals FROM MEMBERS Null のフィールドの代わりにスペースを取得します。

于 2013-11-21T01:55:49.767 に答える
0

この質問に対する答えを観察した後、それらすべてを 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連結されないことに注意してください

NULLIFNULLは、フィールドがorであるかどうかをチェックし、EMPTYスペースのみを含むフィールドまたは空のフィールド (例: '', ' ') であり、出力は or のいずれNULLかになります。NOT NULL

IFNULLではない場合にフィールドを出力します。EMPTY

于 2015-03-23T22:05:13.683 に答える