【问题标题】:SQL Server: use CASE with LIKESQL Server:将 CASE 与 LIKE 一起使用
【发布时间】:2014-06-24 04:45:40
【问题描述】:

我对 SQL 很陌生,希望这里有人可以帮助我。

我有一个存储过程,我想根据列是否包含某个国家/地区来传递不同的值。

到目前为止,我只在检查与特定数字或值的匹配时使用CASE,所以我不确定这个。 有人可以告诉我以下内容是否有效且正确,或者让我知道如何正确编写(仅关于括号中的部分)?

(CASE countries
     WHEN LIKE '%'+@selCountry+'%' THEN 'national'
     ELSE 'regional') AS validity

注意: @selCountry 是一个国家的变量名,国家可以为空,一个国家或多个国家,用逗号和空格分隔。 基本上我只想检查国家是否包含@selCountry,如果是,请将有效性设置为“国家”。

【问题讨论】:

    标签: sql sql-server stored-procedures case sql-like


    【解决方案1】:

    这是您需要的语法:

    CASE WHEN countries LIKE '%'+@selCountry+'%' THEN 'national' ELSE 'regional' END
    

    尽管根据您最初的问题,我会以不同的方式解决它,将@selcountry int 的内容拆分为表格形式并加入它。

    【讨论】:

      【解决方案2】:

      在别名前添加END

      CASE WHEN countries LIKE '%'+@selCountry+'%' THEN 'national' 
           ELSE 'regional' 
           END 
      AS validity
      

      【讨论】:

      • 也谢谢你。
      【解决方案3】:

      你也可以这样做

      select *
      from table
      where columnName like '%' + case when @varColumn is null then '' else @varColumn end  +  ' %'
      

      【讨论】:

        【解决方案4】:
        SELECT Lname, Cods, CASE WHEN Lname LIKE '% HN%' THEN SUBSTRING(Lname, 
        CHARINDEX(' ', Lname) - 50, 50) WHEN Lname LIKE 'HN%' THEN Lname ELSE 
        Lname END AS LnameTrue FROM dbo.____Fname_Lname
        

        【讨论】:

          【解决方案5】:

          您需要了解 SQL(和关系数据库)的第一件事是您不应该在单个字段中存储多个值。

          您应该创建另一个表并每行存储一个值。

          这将使您的查询更容易,并且您的数据库结构更好。

          select 
              case when exists (select countryname from itemcountries where yourtable.id=itemcountries.id and countryname = @country) then 'national' else 'regional' end
          from yourtable
          

          【讨论】:

          • “你做错了”不是一个有用的答案。也许是一个有用的评论。
          • @miken32 当像 OP 这样的人“对 SQL 还很陌生”时,我认为“你做错了”是 最有帮助的答案。
          • 查询数据库的人并不总是设计数据库的人...
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-03-21
          • 2019-11-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多