SQL REPLACE带有NULL意外结果

时间:2016-04-19 01:15:01

标签: sql sql-server tsql sql-server-2012 sql-server-2008-r2

我想将某些varchar替换为NULL。我直接使用了

SELECT REPLACE('abc', '1', NULL)

即。对于每个输入varchar,如果至少有一个' 1'我希望整个输入变为NULL(例如' 123'为NULL,' abc-1'为NULL等)

即使没有匹配(例如不需要替换),我甚至会烦恼,它仍然给我NULL。例如,运行上面的语句会给你NULL。

为什么呢?任何解决方法?

选择"为什么"组件和一个很好的简单解决方法。

1 个答案:

答案 0 :(得分:5)

根据REPLACE文档:

  

如果任何一个参数为NULL,则返回NULL。

根据以上所述,此查询将为所有列返回NULL

SELECT 
    REPLACE(NULL, 'abc', 'a'),
    REPLACE('abc', NULL, 'a'),
    REPLACE('abc', 'a', NULL)

如果您想为包含NULL的每个输入返回'1',请使用CASE表达式:

SELECT
    CASE 
        WHEN 'abc' LIKE '%1%' THEN NULL
        ELSE 'abc'
    END