意外结果为NULL的SQL REPLACE



我想将某些varchar替换为NULL。直截了当地说,我使用了

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

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

困扰我的是,即使没有匹配(例如,不需要替换),它仍然会给我NULL。例如,运行上面的语句会得到NULL。

为什么?有什么变通办法吗?

答案由"为什么"组件和一个简单的解决方法来选择。

根据REPLACE文档:

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

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

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

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

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

最新更新