updated_date = 08-Jun-2010;
我有这样小于或等于的Oracle SQL
select * from asd whre updated_date <= todate('08-Jun-2010', 'dd-MM-yy');
查询,但我没有得到任何结果。它只适用于如果todate
是09年6月9日...
即我的equalto
运营商不能正常工作。
这是为什么呢?
updated_date = 08-Jun-2010;
我有这样小于或等于的Oracle SQL
select * from asd whre updated_date <= todate('08-Jun-2010', 'dd-MM-yy');
查询,但我没有得到任何结果。它只适用于如果todate
是09年6月9日...
即我的equalto
运营商不能正常工作。
这是为什么呢?
在Oracle中,DATE是一个时间点。它总是有一个时间组件,精确到秒。 todate('08-Jun-2010', 'dd-Mon-yyyy')
在Oracle中与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
。
检查这一点,
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');
默认TRUNC
功能日期参数将删除的时间。
参考Trunc
我觉得一个月格式的缩写名称为“MON”而不是“MMM” – Sujee 2010-06-08 11:58:55
+1使用“MM”代替“一个月的缩写名”的格式的原因。 – Sujee 2010-06-08 12:04:24
@Sujee:谢谢我已经更新了我的答案 – 2010-06-08 12:54:01