我有两个使用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)也在这两个范围内。
我完全难过了。这可能会发生什么?任何协助将不胜感激
答案 0 :(得分:1)
当您使用双引号时,您正在比较text-strings
,而不是dates
。 01/07/2013
的字面含义小于25/01/2013
,基本上这些字符串是逐字符比较的。如果您查看两个字符串中的第一个字符,则0
小于2
。
答案 1 :(得分:0)
答案是不要使用Between。
将WHERE
子句中的该行分成两行,并使用>=
或>
明确指定是否包含该日期。
AND date_in > "1/07/2013"
或date_in >= "1/07/2013"
AND date_in < "1/08/2013"
或date_in <= "1/08/2013"