0

我有两个使用 between 子句生成日期范围的查询,其中日期通过 VB.net 程序传入:

select
 w.plate,
 Description,
 Date_in,
 time_in,
 Date_out,
 Time_out,
 Date_out-Date_in as "Days on Site",
 Time_out-Time_in as "Duration on Site (Hrs)"
from tbl_stay S
inner join tblwhitelist W
on S.plate=W.plate
where Date_in between "1/06/2013" and "25/09/2013"

select
Plate,
Date_in,
Time_in,
Date_out,
Time_out,
Date_out-Date_in as "Days on site",
Time_out-Time_in as "Duration on site (Hrs)"
from tbl_stay
where plate not in (Select plate from tblwhitelist)
and date_in between "1/07/2013" and "1/08/2013"

为了进行测试,我有一个数据块,其输入和输出的日期均为“25/07/2013”​​。这些查询似乎只在当月的日期大于数据中提到的日期时才会产生结果 (25)

例如:上述查询中提到的日期:

Date_in between "1/06/2013" and "25/09/2013"

但是会产生结果

date_in between "1/07/2013" and "1/08/2013"

将不会。即使测试数据中包含的日期 (25/07/2013) 在这两个范围内。

我完全被难住了。这里可能发生了什么?任何援助将不胜感激

4

2 回答 2

1

当您使用双引号时,您是在比较text-strings,而不是dates。字面意思01/07/2013是小于25/01/2013,基本上这些字符串是逐个字符比较的。如果您查看两个字符串中的第一个字符,则0小于2

于 2013-08-06T14:41:02.643 回答
0

答案是不要使用Between。

将子句中的该行分成两部分,并使用 a或仅WHERE使用 a 明确指定是否包含该日期。>=>

AND date_in > "1/07/2013"或者date_in >= "1/07/2013"

AND date_in < "1/08/2013"或者date_in <= "1/08/2013"

于 2013-08-06T14:20:21.227 回答