如何使用SQL Server将空白空间转换为空值?

时间:2010-09-13 15:23:01

标签: sql-server null is-empty

我有一个表,此表上的列包含一些记录的空格。现在我需要将数据移动到另一个表并用NULL值替换空格。

我试图使用:

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

但它不起作用。它会将col1的所有值转换为NULL。我只想将那些空格为空的值转换为NULL

7 个答案:

答案 0 :(得分:92)

我使用NULLIF函数解决了类似的问题:

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

From the T-SQL reference:

  

如果两个表达式不相等,则NULLIF返回第一个表达式。如果表达式相等,则NULLIF返回第一个表达式类型的空值。

答案 1 :(得分:38)

你试过这个吗?

UPDATE table 
SET col1 = NULL 
WHERE col1 = ''

评论者指出,您不必执行ltrim()rtrim()NULL列与''不匹配。

答案 2 :(得分:23)

SQL Server在比较字符串时忽略尾随空格,因此''=''。只需使用以下查询进行更新

UPDATE table
SET col1 = NULL
WHERE col1 = ''

表中的NULL值将保持为NULL,并且只有空格字符的任何数字的col1将更改为NULL。

如果您想在从一张桌子到另一张桌子的复制过程中这样做,请使用:

INSERT INTO newtable ( col1, othercolumn )
SELECT
   NULLIF(col1, ''),
   othercolumn
FROM table

答案 3 :(得分:12)

此代码生成一些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'

答案 4 :(得分:9)

从源表中选择时,case语句应该可以解决问题:

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

另外,需要注意的一点是,你的LTRIM和RTRIM会将空格('')的值减少为空白('')。如果需要删除空格,则应适当修改case语句:

CASE
  WHEN LTRIM(RTRIM(col1)) = '' THEN NULL
  ELSE LTRIM(RTRIM(col1))
END col1

答案 5 :(得分:7)

也许是这样的?

UPDATE [MyTable]
SET [SomeField] = NULL
WHERE [SomeField] is not NULL
AND LEN(LTRIM(RTRIM([SomeField]))) = 0

答案 6 :(得分:0)

这是ya的正则表达式。

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

基本上可以找到任何没有字母或数字的列,并将其设置为null。如果您的列只包含特殊字符,则可能需要更新。