none
SELECTの列でNULL、非NULLに対して'○'等の特定の文字を表示したい RRS feed

  • 質問

  • 皆様お世話になります。

    SQL ServerでSQLを勉強し始めて1.5ヶ月の初心者です。

    SELECT LEN(COLUMN1) FROM ... の様に抽出内容を関数で加工できることは分かったのですが、Excelの関数で例えるなら、

    SELECT IF(ISBLANK(COLUMN1),"","○") FROM ... のようなことは出来ないでしょうか?

    列の内容がUUIDで、それ自体をエンドユーザーに表示する意味が無く、未登録ならNULL、登録済ならNULLでないことを表示したいニーズです。

    とりあえず表示用のプログラム(C/C++)側で実装済ですが、SQLで済むものならそうしたいところです。

    よろしくお願いします。

    2020年6月5日 22:14

回答

  • こんな

    select a.ID, ISNULL(a.UUID , '未入力') from a --UUID列の型が文字列の場合
    select a.ID, ISNULL(CAST( a.UUID as varchar(36)) , '未入力') from a --UUID列の型がuniqueidentifierの場合
    select a.ID, IIF(a.UUID is NULL ,'未入力', '入力済み') from a
    select a.ID, (case when a.UUID is NULL then '未入力' else '入力済み' end) from a


    個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)

    • 編集済み gekkaMVP 2020年6月5日 23:25
    • 回答としてマーク M14Cluster 2020年6月6日 10:11
    2020年6月5日 23:11
  • SQL Server としては、空白とNULLが明確に判断されるため、テーブル空白とNULLが存在している場合は、条件を考慮する必要があるかもしれません。

    select * from tab

    c1 c2
    1 NULL
    2
    3 TEST


    select
    	case 
    		when c2 is null then '×'
    		when c2 = '' then '×'
    		when c2 is not null then '〇'
    	end
    from dbo.tab

    (列名なし)
    ×
    ×


    • 編集済み NOBTA 2020年6月6日 4:18
    • 回答としてマーク M14Cluster 2020年6月6日 10:17
    2020年6月6日 4:17

すべての返信

  • こんな

    select a.ID, ISNULL(a.UUID , '未入力') from a --UUID列の型が文字列の場合
    select a.ID, ISNULL(CAST( a.UUID as varchar(36)) , '未入力') from a --UUID列の型がuniqueidentifierの場合
    select a.ID, IIF(a.UUID is NULL ,'未入力', '入力済み') from a
    select a.ID, (case when a.UUID is NULL then '未入力' else '入力済み' end) from a


    個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)

    • 編集済み gekkaMVP 2020年6月5日 23:25
    • 回答としてマーク M14Cluster 2020年6月6日 10:11
    2020年6月5日 23:11
  • SQL Server としては、空白とNULLが明確に判断されるため、テーブル空白とNULLが存在している場合は、条件を考慮する必要があるかもしれません。

    select * from tab

    c1 c2
    1 NULL
    2
    3 TEST


    select
    	case 
    		when c2 is null then '×'
    		when c2 = '' then '×'
    		when c2 is not null then '〇'
    	end
    from dbo.tab

    (列名なし)
    ×
    ×


    • 編集済み NOBTA 2020年6月6日 4:18
    • 回答としてマーク M14Cluster 2020年6月6日 10:17
    2020年6月6日 4:17
  • gekka様、コメントありがとうございます。

    ISNULL()ではNULLでないときUUIDが表示されてしまいますが、IIF、case の方法で希望の結果になりました。

    ありがとうございました。

    2020年6月6日 10:11
  • NOBTA様、コメントありがとうございます。

    今回のニーズでは空白文字列が入力されることはありませんが、他に応用する際に空白かNULLかの区別は注意したいと思います。

    ご指摘ありがとうございました。

    2020年6月6日 10:17