56

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

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

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

しかし、うまくいきません。のすべての値を に変換しcol1ますNULL。空のスペースを持つ値のみを に変換したいだけですNULL

4

7 に答える 7

138

関数を使用して同様の問題を解決しましたNULLIF

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

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

2 つの式が等しくない場合、NULLIF は最初の式を返します。式が等しい場合、NULLIF は最初の式の型の null 値を返します。

于 2012-10-05T08:49:27.727 に答える
54

これを試しましたか?

UPDATE table 
SET col1 = NULL 
WHERE col1 = ''

コメンターが指摘しているように、ltrim()orを行う必要はなくrtrim()NULL列は一致しません''

于 2010-09-13T15:26:49.740 に答える
33

SQL Server は、文字列を比較するときに末尾の空白を無視するため、' ' = ''. 更新には次のクエリを使用してください

UPDATE table
SET col1 = NULL
WHERE col1 = ''

テーブル内の NULL 値は NULL のままで、スペースのみの任意の数字を持つ col1 は NULL に変更されます。

あるテーブルから別のテーブルへのコピー中にそれを行いたい場合は、これを使用します。

INSERT INTO newtable ( col1, othercolumn )
SELECT
   NULLIF(col1, ''),
   othercolumn
FROM table
于 2010-09-20T00:45:08.123 に答える
16

このコードは、データベース内のすべてのテーブルと列でこれを実現できる 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'
于 2014-03-19T15:53:54.837 に答える
12

ソース テーブルから選択するときは、case ステートメントでうまくいくはずです。

CASE
  WHEN col1 = ' ' THEN NULL
  ELSE col1
END col1

また、注意すべきことの 1 つは、LTRIM と RTRIM が値をスペース (' ') からブランク ('') に減らすことです。空白を削除する必要がある場合は、case ステートメントを適切に変更する必要があります。

CASE
  WHEN LTRIM(RTRIM(col1)) = '' THEN NULL
  ELSE LTRIM(RTRIM(col1))
END col1
于 2010-09-13T15:30:07.143 に答える
7

たぶん、このようなものですか?

UPDATE [MyTable]
SET [SomeField] = NULL
WHERE [SomeField] is not NULL
AND LEN(LTRIM(RTRIM([SomeField]))) = 0
于 2010-09-13T15:26:22.100 に答える
0

ここにあなたのための正規表現があります。

update table
set col1=null
where col1 not like '%[a-z,0-9]%'

基本的に、文字や数字が含まれていない列を見つけてnullに設定します。特殊文字のみを含む列がある場合は、更新が必要になる場合があります。

于 2010-09-13T15:57:25.083 に答える