我想用DATETIME SCHEDFINISH字段检索所有记录,其值为TODAY或TOMORROW(无论TIME部分,DATE部分都很重要)
我试过了:
select schedfinish from plans
where
TO_DATE(CURRENT_DATE,'YYYY/MM/DD')+1<= TO_DATE(SCHEDFINISH,'YYYY/MM/DD');
但它返回我的SCHEDFINISH列值和31.10.2013; 2014年2月28日,2015年1月31日,结果完全不正确。 如果可能的话,我想使用这个CURRENT_DATE语法,但为什么它不起作用?
如果我只为今天尝试,那么它可行:
TO_DATE(CURRENT_DATE,'YYYY/MM/DD')= TO_DATE(SCHEDFINISH,'YYYY/MM/DD')
但我今天和明天都需要。
由于
答案 0 :(得分:1)
假设schedfinish是日期数据类型,您可以这样做:
where schedfinish >= trunc(current_date)
and schedfinish < trunc(current_date + 2)
答案 1 :(得分:1)
问题是你使用TO_DATE
,如果你运行它:
SELECT
TO_DATE(CURRENT_DATE,'YYYY/MM/DD')+1 currentdate,
TO_DATE(SCHEDFINISH,'YYYY/MM/DD') myscheddate,
SCHEDFINISH
FROM plans
WHERE TO_DATE(CURRENT_DATE,'YYYY/MM/DD')+1<= TO_DATE(SCHEDFINISH,'YYYY/MM/DD');
..你会看到问题所在。使用TO_DATE
时,您提供的格式字符串告诉数据库第一个参数所在的格式。但是,CURRENT_DATE
和(我怀疑)SCHEDFINISH
不在YYYY/MM/DD
中格式,所以转换的结果是错误的。
鉴于他们无论如何都是日期,你不需要做任何你可以做的投射TO_DATE
:
SELECT SCHEDFINISH
FROM plans
WHERE SCHEDFINISH >= TRUNC(CURRENT_DATE)
AND SCHEDFINISH < TRUNC(CURRENT_DATE+2);
... TRUNC
关键字截断你的日期字段(基本上将时间部分设置为00:00:00),这是我认为你试图用演员表做的事情。所以如果你想获得今天的记录,你可以这样做:
SELECT SCHEDFINISH
FROM plans
WHERE TRUNC(SCHEDFINISH) = TRUNC(CURRENT_DATE)