【问题标题】:Using the LIKE operator and "greater than" in a Case When expression在 Case When 表达式中使用 LIKE 运算符和“大于”
【发布时间】:2020-07-14 23:34:06
【问题描述】:

这是我正在编写的单元测试中的一个部分。

如果列中的任何行包含某个字符串,我想说通过。所以换句话说,我想要的是“如果包含字符串的行数大于零而不是通过测试”。

我有类似下面的代码,但它没有说需要声明myVariable。我做错了什么?

    DECLARE @myVariable BIT =
            (
                SELECT CASE
                           WHEN Count(Description) LIKE '%astring%' > 0
                                 THEN
                               1
                           ELSE
                               0
                       END
                FROM TABLE

SELECT @myVariable

【问题讨论】:

    标签: sql sql-server tsql count case-when


    【解决方案1】:
    DECLARE @myVariable BIT=
         (
          SELECT IIF(ISNULL(count(*),0)>0,1,0) 
          FROM TABLE
          WHERE EXISTS(SELECT * FROM TABLE WHERE Description LIKE '%astring%')
         )
    
    SELECT @myVariable AS myVariable
    

    【讨论】:

      【解决方案2】:

      只是:

      DECLARE @myVariable BIT = (
          SELECT MAX(CASE WHEN Description LIKE '%astring%' THEN 1 ELSE 0 END)
          FROM mytable
      );
      

      如果表中至少有一行具有与模式匹配的Description,这会将变量设置为1

      【讨论】:

        【解决方案3】:

        我想你想要:

        DECLARE @myVariable BIT =
                (SELECT (CASE WHEN Count(*) > 0 THEN 1 ELSE 0 END)
                 FROM TABLE
                 WHERE Description LIKE '%astring%' 
                );
        

        我不会为此推荐bit。 SQL Server 并不真正支持布尔值。整数(甚至是tinyints)通常比bits 更容易使用。

        【讨论】:

        • 我怎么没想到。我已经为此工作了三十分钟。谢谢!
        • @GordonLinoff 出于兴趣使用bit 的缺点是什么?他们至少强制执行 2 个值(3 个包括 null)。
        • @DaleK 。 . .我面临的最大问题是sum(<bitcol>) 不起作用。更简单地说,我考虑了数据库使用它们所需的所有位移和掩码。只是不必要的额外操作。
        猜你喜欢
        • 1970-01-01
        • 2013-01-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-02-01
        • 2012-09-20
        • 1970-01-01
        相关资源
        最近更新 更多