updated_date = 08-Jun-2010;
我有这样的查询
select * from asd whre updated_date <= todate('08-Jun-2010', 'dd-MM-yy');
但我没有得到任何结果。它只适用于todate
是2010年6月9日...
即。我的equalto
运营商无法正常运作。
为什么会那样?
答案 0 :(得分:24)
在Oracle中,DATE是一个时间点。它始终具有精确到秒的时间分量。 Oracle中的todate('08-Jun-2010', 'dd-Mon-yyyy')
与todate('08-Jun-2010 00:00:00', 'dd-Mon-yyyy hh24:mi:ss')
相同。因此,如果您选择截至该日期的行,那么当天的时间组件不等于00:00
时,您将无法获得任何行。
如果您要选择08-JUN-2010
之前的所有行,我建议您使用:
< to_date('09-06-2010', 'dd-MM-yyyy')
或
<= to_date('08-06-2010 23:59:59', 'dd-MM-yyyy hh24:mi:ss')
注意 - 我更正了您的日期格式:如果您想使用缩写的月份名称,则需要使用MON
。我建议改为使用MM
,这样当有人更改其客户端设置(NLS_DATE_LANGUAGE
)时,您就不会收到错误。也更喜欢使用YYYY
代替YY
。
答案 1 :(得分:13)
检查一下,
select to_date('08-Jun-2010', 'dd-MON-yyyy') from dual;
等于2010-06-08 00:00:00
。注意时间。
updated_date
有时间部分。要包含它们,请使用此查询
select * from asd where trunc(updated_date) <= to_date('08-Jun-2010', 'dd-MON-yyyy');
date参数的默认TRUNC
函数将删除时间。
参考Trunc