select
case when '9/1/08' between '9/1/08' and '9/15/08'
then 'in' else 'out' end as s1,
case when '9/1/08' between '8/28/08' and '9/1/08'
then 'in' else 'out' end as s2
s1 s2
---- ----
in in
(1 row(s) affected)
select
case when '1/1/08' between '1/1/08' and '2/1/08'
then 'in' else 'out' end as s1,
case when '1/1/08' between '12/31/07' and '1/1/08'
then 'in' else 'out' end as s2
s1 s2
---- ----
in out
(1 row(s) affected
注意,第二个查询中的S2答案显示为“Out”,而日期显然应该是在内部。
根据cdonner的说法,原因是:
SQL中DateTime类型的最低有效数字为3毫秒
我认为原因比那简单得多。我认为这是因为他在查询中使用字符串而不是日期。
请原谅我的SQLServer-ish。我主要讲Oracle,所以可能很丑陋。但是,当我将他证明有问题的查询替换为datetime变量时,我得到了正确的输出。
DECLARE @Jan108 datetime
DECLARE @Feb108 datetime
DECLARE @Dec3107 datetime
SET @Jan108 = '1/1/08'
SET @Feb108 = '2/1/08'
SET @Dec3107 = '12/31/07'
select
case when @Jan108 between @Jan108 and @Feb108
then 'in' else 'out' end as s1,
case when @Jan108 between @Dec3107 and @Jan108
then 'in' else 'out' end as s2
哪个是正确的?
NB:这不是为了解决争论或开始一场争吵。我真的想知道SQL Server BETWEEN是否比Oracle BETWEEN功能更少。我们在Oracle中没有这样的问题。