【问题标题】:SQL REPLACE with NULL unexpected resultSQL REPLACE 与 NULL 意外结果
【发布时间】:2016-04-19 01:15:00
【问题描述】:

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

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

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

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

为什么?有什么解决方法吗?

使用“为什么”组件和一个不错的简单解决方法来选择答案。

【问题讨论】:

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


    【解决方案1】:

    根据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
    

    【讨论】:

    • 好的,谢谢,如果它是这样实现的。虽然这对我来说似乎有些不对劲,但我得忍受它。使用 CASE 作为解决方法也很好。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-21
    • 2023-04-01
    • 1970-01-01
    • 2015-10-02
    • 2014-02-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多