【问题标题】:Why is this CASE statement in my T-SQL query not working properly? [closed]为什么我的 T-SQL 查询中的 CASE 语句不能正常工作? [关闭]
【发布时间】:2017-10-07 21:17:12
【问题描述】:

我正在SSMS 中运行以下 T-SQL 代码,但我没有得到关于查询中最后一列的预期结果:

 SELECT *, 
           (CASE WHEN Description like '%AI% '
                 THEN 'AI'
                   ELSE 'OTHER'
                     END) as 'Meal Plan'
 FROM TestTable

TestTable 中的“描述”列是 nvarchar 列。该列中的一个值示例是“STD AI REVENUE”。

根据上面的查询,如果描述列中的对应值为“STD AI REVENUE”,我预计“膳食计划”列的值为“AI”。但是,我的查询是用“其他”填充整个“膳食计划”列。

感谢您的帮助!

【问题讨论】:

    标签: sql-server tsql case sql-like


    【解决方案1】:

    这是你当前的逻辑:

    CASE WHEN Description like '%AI% '
    

    这将匹配空格中的描述结尾。您可能打算这样做:

    CASE WHEN Description like '%AI%'
    

    这是一个演示,展示了您的查询背后的逻辑以及我建议的更正:

    Rextester

    【讨论】:

    • 天哪!输入错误!非常感谢!
    • 也许您的本意是:CASE WHEN Description like '%AI %' ... 在通配符之前有一个空格。
    • 你刚刚给了我一个绝妙的主意!再次感谢!
    • % AI % 前后有空格?但它不能以仅包含 AI(没有前后空格)开始或结束。
    【解决方案2】:

    试试

    CASE WHEN Description like  N'%AI% '
    

    【讨论】:

      【解决方案3】:

      你的情况应该看起来像'%AI%',而不是'%AI%'(注意空格在哪里), 并且如上所述,您应该使用带有 unicode 字段的 unicode 搜索字符串,即使在您的特定情况下它并不重要

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-12-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多