【问题标题】:How to use SQL Case Expression using BETWEEN and OR?如何使用 BETWEEN 和 OR 使用 SQL 案例表达式?
【发布时间】:2020-07-28 20:11:21
【问题描述】:

我正在尝试使用案例表达式来查找介于 -.49 和 -.01 之间或介于 .50 和 .01 之间的总支出。

这是我尝试过的:

CASE WHEN IsNull(FYExpend.TotalExpenditures,0) Between -.49 AND -.01
          OR IsNull(FYExpend.TotalExpenditures,0) Between .50 AND .01
     THEN 'True' ELSE 'False' END AS 'IsImmaterial'

第二部分没有正确评估,因为我有许多介于 0.50 和 .01 之间的记录返回为假。根据我已阅读的所有内容,此语法应该可以工作。我在这里没有发现任何特定于在同一语句中使用 BETWEEN 和 OR 的问题。如果有相关问题,请告诉我。

有谁知道为什么这不起作用?

【问题讨论】:

    标签: sql sql-server database case sql-server-2017


    【解决方案1】:

    第二个条件的区间值是错误的:

    CASE 
        WHEN FYExpend.TotalExpenditures,0 Between -0.49 AND -0.01
        OR IsNull(FYExpend.TotalExpenditures,0) Between 0.01 AND 0.50
     THEN 'True' ELSE 'False' END AS IsImmaterial
    

    注意事项:

    • 你不需要ISNULL,因为0 不属于任何寻找的区间

    • 列别名不应用单引号括起来

    【讨论】:

    • 谢谢你,随着时间间隔的改变,它现在可以工作了。我没有意识到使用 Between 时间隔顺序很重要。
    • 为什么我不能对列别名使用单引号?
    • @K753:这不是一个好的做法(尽管一些数据库允许这样做)。在标准 SQL 中,单引号代表文字字符串。如果您需要一个需要引用的标识符(例如,包含特殊字符、空格、... - 这里不是这种情况),那么为您的数据库使用正确的标识符引用字符。在 SQL Server 中,这是方括号 ([IsImmaterial])。
    【解决方案2】:

    使用简单的布尔逻辑:

    (case when FYExpend.TotalExpenditures between -0.49 and -0.01 or
               FYExpend.TotalExpenditures,0) Between 0.01 and 0.50 
          then 'True' ELSE 'False'
     end) as IsImmaterial
    

    在此逻辑和您的逻辑中,NULL 值都是“假”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-25
      • 1970-01-01
      • 2017-09-05
      • 1970-01-01
      • 2020-05-17
      • 1970-01-01
      相关资源
      最近更新 更多