【问题标题】:Sql Server Can we use multiple OR and AND conditions in the same if clauseSql Server我们可以在同一个if子句中使用多个OR和AND条件吗
【发布时间】:2020-06-29 09:35:46
【问题描述】:

我在 IF 子句中使用了多个 OR 和 AND 条件,但它抛出错误 在预期条件的上下文中指定的非布尔类型表达式,靠近“或”。

DECLARE @PaidAmount1 DECIMAL(18, 2);
DECLARE @PaidAmount2 DECIMAL(18, 2);
DECLARE @PaidAmount3 DECIMAL(18, 2);
DECLARE @PaidAmount4 DECIMAL(18, 2);


IF(((ISNULL(@PaidAmount1,'')) OR (@PaidAmount1='') OR (@PaidAmount1=0.00)) AND ((ISNULL(@PaidAmount2,'')) OR (@PaidAmount2='') OR (@PaidAmount2=0.00)) AND ((ISNULL(@PaidAmount3,'')) OR (@PaidAmount3='') OR (@PaidAmount3=0.00)) AND ((ISNULL(@PaidAmount4,'')) OR (@PaidAmount4='') OR (@PaidAmount4=0.00)))
BEGIN
--statements goes here
END

我们可以像上面那样使用 OR 和 AND 条件吗?

谢谢! 夏姆

【问题讨论】:

  • ((ISNULL(@PaidAmount1,'')) 不是布尔表达式
  • 另外,你的变量是小数,为什么要把它们和空字符串比较?
  • 使用这样的东西 ((ISNULL(@PaidAmount1,'')='') 或 @PaidAmount1 IS NULL
  • HoneyBadger 和 NP007 你说的是对的。十进制不接受字符串。

标签: sql-server toad


【解决方案1】:

isnull 如果不是null,则返回第一个参数;如果第一个参数是null,则返回第二个参数。正如错误消息所说,在这种情况下它不是boolean。如果要检查nullibiliy,则需要使用is null 运算符:

IF (((@PaidAmount1 IS NULL) OR (@PaidAmount1 = '') OR (@PaidAmount1 = 0.00)) AND 
    ((@PaidAmount2 IS NULL) OR (@PaidAmount2 = '') OR (@PaidAmount2 = 0.00)) AND 
    ((@PaidAmount3 IS NULL) OR (@PaidAmount3 = '') OR (@PaidAmount3 = 0.00)) AND 
    ((@PaidAmount4 IS NULL) OR (@PaidAmount4 = '') OR (@PaidAmount4 = 0.00)))

【讨论】:

  • 这几乎是正确的,除了 @PaidAmount1='' 不被接受,因为它是十进制的。
  • 这是正确的条件 IF (((@PaidAmount1 IS NULL) OR (@PaidAmount1 = 0.00)) AND ((@PaidAmount2 IS NULL) OR (@PaidAmount2 = 0.00)) AND ((@PaidAmount3 IS NULL) OR (@PaidAmount3 = 0.00)) AND ((@PaidAmount4 IS NULL) OR (@PaidAmount4 = 0.00)))
猜你喜欢
  • 2017-06-11
  • 2023-04-02
  • 1970-01-01
  • 1970-01-01
  • 2014-08-13
  • 2021-09-02
  • 2019-12-17
  • 1970-01-01
相关资源
最近更新 更多