質問

私にはテーブルがあり、このテーブルに列にはいくつかのレコード用の空のスペースが含まれています。今、私はデータを別のテーブルに移動し、空のスペースをに置き換える必要があります NULL 価値。

私は使用しようとしました:

REPLACE(ltrim(rtrim(col1)),' ',NULL)

しかし、それはうまくいきません。のすべての値を変換します col1NULL. 。空のスペースを持っている値だけを変換したいだけです NULL.

役に立ちましたか?

解決

これを試しましたか?

UPDATE table 
SET col1 = NULL 
WHERE col1 = ''

コメンターが指摘しているように、あなたはする必要はありません ltrim() また rtrim(), 、 と NULL 列は一致しません ''.

他のヒント

同様の問題を使用して解決しました NULLIF 働き:

UPDATE table 
SET col1 = NULLIF(col1, '')

T-SQLリファレンスから:

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に設定します。特殊文字だけの列がある場合は、更新する必要がある場合があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top