我有这张桌子
CREATE TABLE Table1 (
MY_ID INTEGER NOT NULL,
SCAN_TIME TIMESTAMP NOT NULL,
WORKCELL_ID SMALLINT
);
当我使用select SQL获取两个日期之间的记录时,如果用户为两个日期选择相同的日期,我的问题是空的结果
例如:
Select * from Table1
where SCAN_TIME between '20.9.2014' and '20.9.2014'
虽然在那个日期'20 .9.2014'中有记录,但我得到空的结果,只有当我将第二个日期增加一天为'21 .9.2014'时我才会得到结果!为什么这样,我该如何解决?
答案 0 :(得分:3)
TIMESTAMP
包含日期和时间。由于您未在WHERE
条款中指定时间,因此它在两个时间都使用当天的开头。所以你实际上写的相当于:
WHERE SCAN_TIME between '20.9.2014 00:00:00' and '20.9.2014 00:00:00'
除非时间戳的时间部分实际上是00:00:00
,否则它不会满足此标准。您应该将时间戳转换为日期,或指定范围内的时间,例如
WHERE SCAN_TIME between '20.9.2014 00:00:00' and '20.9.2014 23:59:59'
答案 1 :(得分:2)
问题是您使用timestamp
作为类型,由于时间部分,事情搞砸了。尝试使用Date
。
当你在2014-09-20和2014-09-20之间说过,你实际上是在2014-09-20午夜和2014-09-20午夜之间说的,显然除了午夜的确切时刻之外什么都没有
如果您无法控制表格结构,请执行以下评论中建议的PM 77-1 - 使用强制转换将timestamp
投射到date
:
select 1 from table1
where cast(scan_time as date) between 'someday1' and 'someday2';