1

次のSQLselectステートメントでは、nameがnullの場合に国籍を出力し、SQL句のif構文が機能していますが、次のように国籍が出力されません。

table test2

id           integer
case         integer
nationality  char(10)
name         char(24)

1 1 france  ""
2 2 england john

select t.id, 
       if(t.name is null, t.nationality, t.name) 
       as name_equivalent 
from   test2 t;

idname_equivalentを生成します


1 ""
2 john

何故ですか?ありがとうございました。

4

3 に答える 3

2

名前がnullかどうかを確認していますが、空の文字列に設定されています。両方を確認するには、次のものが必要です。

if(t.name is null or t.name='', t.nationality, t.name)
于 2012-07-16T16:29:23.980 に答える
2

null空の文字列と同等ではありません。空の文字列''は有効な形式のデータでnullあり、データが存在しないことを示します。

どちらかを試してください

if (t.name is null or t.name='', t.nationality, t.name)

または、最初の列の名前をnullに設定します

1 1 france null
于 2012-07-16T16:31:22.130 に答える
1

フランスの名前フィールドは実際には空の文字列であり、nullではないようです。selectステートメントで空であることも考慮する必要があります。そのようなt.name = ''

于 2012-07-16T16:29:32.480 に答える