在Oracle SQL中不等于或等于

时间:2010-06-08 11:41:05

标签: oracle plsql

updated_date  = 08-Jun-2010;

我有这样的查询

select * from asd whre updated_date <= todate('08-Jun-2010', 'dd-MM-yy');

但我没有得到任何结果。它只适用于todate是2010年6月9日...

即。我的equalto运营商无法正常运作。

为什么会那样?

2 个答案:

答案 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