我试图在数据库中查找录取日期早于特定时间范围的所有记录(在这种情况下,所有录取日期都早于4天)。
我有:
select memberid, admitdate
from membertable
where admitdate < (sysdate-4)结果,我得到了很多与此匹配的录取日期,但我也获得了仅2天前的日期,所以这与我的代码不匹配。我做错了什么?
如果有帮助,录取日期的格式为mm/dd/yyyy。
发布于 2018-06-21 23:49:29
日期,包括sysdate,都有一个时间部分。即使您所有的sysdate值都是午夜,这仍然是一个时间,如果您在午夜运行查询,admitdate将只在午夜运行。
select sysdate, sysdate-4, trunc(sysdate), trunc(sysdate)-4 from dual;
SYSDATE SYSDATE-4 TRUNC(SYSDATE) TRUNC(SYSDATE)-4
------------------- ------------------- ------------------- -------------------
2018-06-21 16:44:53 2018-06-17 16:44:53 2018-06-21 00:00:00 2018-06-17 00:00:00如果您在sysdate-4上过滤记录,那么它将包括所有admitdate值,在本例中为2018-06-17 16:44:53;因此,假设17号的所有记录实际上都是午夜。
with membertable (memberid, admitdate) as (
select 1, date '2018-06-15' from dual
union all select 2, date '2018-06-16' from dual
union all select 3, date '2018-06-17' from dual
union all select 4, date '2018-06-18' from dual
union all select 5, date '2018-06-19' from dual
union all select 6, date '2018-06-20' from dual
union all select 7, date '2018-06-21' from dual
)
select memberid, admitdate
from membertable
where admitdate < (sysdate-4);
MEMBERID ADMITDATE
---------- -------------------
1 2018-06-15 00:00:00
2 2018-06-16 00:00:00
3 2018-06-17 00:00:00如果您截断要比较的值,则其时间部分也将被视为午夜,因此您将仅匹配该时间点之前的记录,2018-06-17 00:00:00: 00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00
with membertable (memberid, admitdate) as (
select 1, date '2018-06-15' from dual
union all select 2, date '2018-06-16' from dual
union all select 3, date '2018-06-17' from dual
union all select 4, date '2018-06-18' from dual
union all select 5, date '2018-06-19' from dual
union all select 6, date '2018-06-20' from dual
union all select 7, date '2018-06-21' from dual
)
select memberid, admitdate
from membertable
where admitdate < trunc(sysdate)-4;
MEMBERID ADMITDATE
---------- -------------------
1 2018-06-15 00:00:00
2 2018-06-16 00:00:00发布于 2018-06-20 23:54:06
admitdate应为date。您似乎在暗示它是一个字符串。您可以尝试:
where to_date(admitdate, 'MM/DD/YYYY') < trunc(sysdate) - 4;然后,您可以修改表中的数据,以便将其存储为日期。
https://stackoverflow.com/questions/50952360
复制相似问题