我想将某些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