SQL Serverを使用して、空のスペースをnull値に変換する方法は?
-
02-10-2019 - |
質問
私にはテーブルがあり、このテーブルに列にはいくつかのレコード用の空のスペースが含まれています。今、私はデータを別のテーブルに移動し、空のスペースをに置き換える必要があります NULL
価値。
私は使用しようとしました:
REPLACE(ltrim(rtrim(col1)),' ',NULL)
しかし、それはうまくいきません。のすべての値を変換します col1
に NULL
. 。空のスペースを持っている値だけを変換したいだけです NULL
.
解決
これを試しましたか?
UPDATE table
SET col1 = NULL
WHERE col1 = ''
コメンターが指摘しているように、あなたはする必要はありません ltrim()
また rtrim()
, 、 と NULL
列は一致しません ''
.
他のヒント
同様の問題を使用して解決しました NULLIF
働き:
UPDATE table
SET col1 = NULLIF(col1, '')
Nullifは、2つの式が等しくない場合、最初の式を返します。式が等しい場合、nullifは最初の式のタイプのnull値を返します。
SQL Serverは、文字列を比較するときにトレーリングホワイトスペースを無視するため、 '' = ''。アップデートには、次のクエリを使用してください
UPDATE table
SET col1 = NULL
WHERE col1 = ''
テーブル内のnull値はnullのままであり、スペースのみの数字が任意の数字の文字がnullに変更されます。
あるテーブルから別のテーブルへのコピー中にやりたい場合は、これを使用してください。
INSERT INTO newtable ( col1, othercolumn )
SELECT
NULLIF(col1, ''),
othercolumn
FROM table
このコードは、データベース内のすべてのテーブルと列でこれを達成できるSQLを生成します。
SELECT
'UPDATE ['+T.TABLE_SCHEMA+'].[' + T.TABLE_NAME + '] SET [' + COLUMN_NAME + '] = NULL
WHERE [' + COLUMN_NAME + '] = '''''
FROM
INFORMATION_SCHEMA.columns C
INNER JOIN
INFORMATION_SCHEMA.TABLES T ON C.TABLE_NAME=T.TABLE_NAME AND C.TABLE_SCHEMA=T.TABLE_SCHEMA
WHERE
DATA_TYPE IN ('char','nchar','varchar','nvarchar')
AND C.IS_NULLABLE='YES'
AND T.TABLE_TYPE='BASE TABLE'
ケースステートメントは、ソーステーブルから選択するときにトリックを行う必要があります。
CASE
WHEN col1 = ' ' THEN NULL
ELSE col1
END col1
また、注意すべきことの1つは、LTRIMとRTRIMが空間( '')から空白( '')に値を減らすことです。空白を削除する必要がある場合は、ケースステートメントを適切に変更する必要があります。
CASE
WHEN LTRIM(RTRIM(col1)) = '' THEN NULL
ELSE LTRIM(RTRIM(col1))
END col1
多分このようなもの?
UPDATE [MyTable]
SET [SomeField] = NULL
WHERE [SomeField] is not NULL
AND LEN(LTRIM(RTRIM([SomeField]))) = 0
これがYAの正規表現です。
update table
set col1=null
where col1 not like '%[a-z,0-9]%'
本質的に、文字や数字が含まれていない列を見つけて、それをnullに設定します。特殊文字だけの列がある場合は、更新する必要がある場合があります。