none
空白とNULLを置換する RRS feed

  • 質問

  • NVARCHARで定義された列があります。そこにabcやdef等の文字列が入っていますが、一方で、空白やNULLが入ることもあります。このテーブルを別テーブルへコピー(INSERT INTO, SELECT, FROM)時に、空白やNULLを特定文字列(例えばXXX)で置換したいです。方法を教えてください。

    abc

    ----

    def

    ----

    ----

    NULL

    ----

    2020年1月27日 13:05

すべての返信

  • nullはisnull関数で、空白はcase文で処理すれば良いでしょう。

    (例)
    insert into hoge select isnull(カラムA, '置換したい文字列') ・・・

    insert into hoge select (case カラムA when ' ' then '置換したい文字列' else カラムA end) ・・・

    #SQL Serverは比較する文字列の長さが違う場合、末尾に空白を足して長い方に長さを揃えてから比較します。

    INF: SQL Server が末尾のスペースを含む文字列を比較方法
    https://support.microsoft.com/ja-jp/help/316626/inf-how-sql-server-compares-strings-with-trailing-spaces

    (追記)
    カラムAがnullや空白を取るのであれば、組み合わせて下さい

    insert into hoge select (case isnull(カラムA, ' ') when ' ' then '置換したい文字列' else カラムA end) ・・・


    ★良い回答には質問者は回答済みマークを、閲覧者は投票を!


    2020年1月27日 14:22
  • 以下のサンプルクエリを実行することで、やりたいことが実現できるかもしれません。 コンバート後は、データが意図した状態になっているかについては確認すると良いかと思います。

    create table table1 (c1 nvarchar(50))
    go
    create table table2 (c1 nvarchar(50))
    go
    insert into table1 values (N'aaa'),(N'bbb'),(N''),(N''),(NULL),(NULL),(NULL)
    go
    select count(*) as [count] from table1
    go
    -- 空白文字
    select count(*) as [count] from table1 where c1 = N''
    go
    -- NULL
    select count(*) as [count] from table1 where c1 is null
    go
    insert into table2
    select case 
    		when c1 = N'' or c1 is null then N'AAA'
    	   else
    			c1
           end
    from table1
    go
    select * from table2
    go
    

    2020年1月28日 3:47
  • colrofulさん、こんにちは。フォーラムオペレーターのHarukaです。
    MSDNフォーラムにご投稿くださいましてありがとうございます。

    ご質問いただいた件ですが、その後いかがでしょうか。
    trapemiyaさんとNOBTAさんから寄せられた投稿はお役に立ちましたか。

    参考になった投稿には [回答としてマーク] をお願い致します。

    設定いただくことで、
    他のユーザーもお役に立つ回答を見つけやすくなります。

    お手数ですが、ご協力の程どうかよろしくお願いいたします。

    MSDN/ TechNet Community Support Haruka
    ~参考になった投稿には「回答としてマーク」をご設定ください。なかった場合は「回答としてマークされていない」も設定できます。同じ問題で後から参照した方が、情報を見つけやすくなりますので、 ご協力くださいますようお願いいたします。また、MSDNサポートに賛辞や苦情がある場合は、MSDNFSF@microsoft.comまでお気軽にお問い合わせください。~

    2020年2月11日 5:47
    モデレータ