SQL REPLACE带有NULL意外结果

use*_*188 0 sql t-sql sql-server sql-server-2008-r2 sql-server-2012

我想将某些varchar替换为NULL.我直接用过

SELECT REPLACE('abc', '1', NULL)
Run Code Online (Sandbox Code Playgroud)

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

甚至在没有匹配的情况下(例如不需要替换),我的烦恼是什么,它仍然给我NULL.例如,运行上面的语句会给你NULL.

为什么?任何解决方法?

使用"why"组件和一个简单的解决方法来挑选答案.

Fel*_*tan 5

根据REPLACE文件:

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

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

SELECT 
    REPLACE(NULL, 'abc', 'a'),
    REPLACE('abc', NULL, 'a'),
    REPLACE('abc', 'a', NULL)
Run Code Online (Sandbox Code Playgroud)

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

SELECT
    CASE 
        WHEN 'abc' LIKE '%1%' THEN NULL
        ELSE 'abc'
    END
Run Code Online (Sandbox Code Playgroud)