什么';这些SQL条件之间的区别是什么?
及什么';这些SQL条件之间的区别是什么?,sql,firebird,Sql,Firebird,及 第一个示例实现了OR条件 以下情况也是如此…… A) (:index=0)和(DateEx介于:pDat1和:pDate2之间) B) (:index=1或:index=2)和(DateEx>=:pDat1) 它是A或B 第二个不太明显 它有两个部分,分别是和。但是它在第一个版本中的A中有一个额外的ELSE 如果以下两项均为真,则为真… A) (:index=0)和(DateEx介于:pDat1和:pDat2之间)或(:index 0) B) (:index=1或:index=2)和(Da
第一个示例实现了OR条件 以下情况也是如此……
A) <代码>(:index=0)和(DateEx介于:pDat1和:pDate2之间)
B) <代码>(:index=1或:index=2)和(DateEx>=:pDat1) 它是
A或B
第二个不太明显 它有两个部分,分别是
和。但是它在第一个版本中的A
中有一个额外的ELSE
如果以下两项均为真,则为真…
A) (:index=0)和(DateEx介于:pDat1和:pDat2之间)或(:index 0)
B) (:index=1或:index=2)和(DateEx>=:pDat1)
但这有点不正确。因为如果:index=0
,那么B
永远不可能是真的
事实上,您根本不需要任何CASE
语句,只需使用这个
Select * from Example
where
1 = Case when :index = 0 then
Case when DateEx Between :pDat1 and :pDat2 then 1 end
else 1
end
and 1 = Case When :index = 1 or :index = 2 then
Case When DateEx >= :pDat1 then 1 end
end
第一个示例实现了OR条件
以下情况也是如此……
A) <代码>(:index=0)和(DateEx介于:pDat1和:pDate2之间)
B) <代码>(:index=1或:index=2)和(DateEx>=:pDat1)
它是A或B
第二个不太明显 它有两个部分,分别是
和。但是它在第一个版本中的A
中有一个额外的ELSE
如果以下两项均为真,则为真…
A) (:index=0)和(DateEx介于:pDat1和:pDat2之间)或(:index 0)
B) (:index=1或:index=2)和(DateEx>=:pDat1)
但这有点不正确。因为如果:index=0
,那么B
永远不可能是真的
事实上,您根本不需要任何CASE
语句,只需使用这个
Select * from Example
where
1 = Case when :index = 0 then
Case when DateEx Between :pDat1 and :pDat2 then 1 end
else 1
end
and 1 = Case When :index = 1 or :index = 2 then
Case When DateEx >= :pDat1 then 1 end
end
您可以重写第一个条件:
WHERE
((:index = 0) AND (DateEx Between :pDat1 and :pDate2))
OR
((:index = 1 or :index = 2) AND (DateEx >= :pDat1))
第二个条件可以重写:
(:index = 0 AND DateEx BETWEEN :pDat1 AND :pDat2)
OR
(:index IN (1, 2) AND DateEx >= :pDat1)
因此,区别在于第一个查询处理的是:index=0的情况,第二个查询只适用于:index=1或:index=2。您可以重写第一个条件:
WHERE
((:index = 0) AND (DateEx Between :pDat1 and :pDate2))
OR
((:index = 1 or :index = 2) AND (DateEx >= :pDat1))
第二个条件可以重写:
(:index = 0 AND DateEx BETWEEN :pDat1 AND :pDat2)
OR
(:index IN (1, 2) AND DateEx >= :pDat1)
因此,不同之处在于,第一个查询处理的是:index=0的情况,第二个查询只适用于:index=1或:index=2。我删除了我的答案,因为我误读了案例陈述。第一个查询的意图更为明确。而且,非常重要的是,第一个查询只适用于“中间者”案例。第二个案例在这种情况下不起作用。你真的不应该在
之间使用(几乎永远都不应该,但特别是日期)。这涉及到一些困难/奇怪的情况,特别是如果你处理时间戳的话。最好使用“下限包容,上限排斥”的心态(即,DateEx>=:pDat1和DateEx
,其中pDat2
已被适当调整/计算)。X-Zero,我真的不同意你从不使用“between”的建议。如果你了解它的工作原理,这是完美的。此外,日期类型没有问题。时间戳可能是“棘手的”在任何条件中。@WarmBooter-如果他不能分辨这两个语句之间的区别,可以说他不知道之间的也有什么作用。在第一个示例中,两个When语句中只有一个必须通过。在第二个示例中,两个When语句都必须通过。一个有一个,另一个没有。我删除了我的答案since我误读了案例陈述。第一个案例的意图更为明确。而且,非常重要的是,第一个案例仅适用于“中间”案例。第二个案例在这种情况下不起作用。你真的不应该在两个案例之间使用(几乎永远都不应该,尤其是日期)。这涉及到一些困难/奇怪的情况,尤其是当你处理时间戳时。最好使用“下限包含,上限独占”的思维方式(即,DateEx>=:pDat1和DateEx
,其中pDat2
已经过适当的调整/计算).X-Zero,我真的不同意你从不使用“介于之间”的建议。如果你了解它的工作原理,这是完美的。而且,日期类型没有问题。时间戳可能是“棘手的”在任何条件中。@WarmBooter-如果他不能分辨这两个语句之间的区别,可以说他不知道之间的也有什么作用。在第一个示例中,两个When语句中只有一个必须通过。在第二个示例中,两个When语句都必须通过。一个有一个,另一个没有。