在Oracle SQL中不等于或等于

And*_*eda 9 oracle plsql

updated_date  = 08-Jun-2010;
Run Code Online (Sandbox Code Playgroud)

我有这样的查询

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

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

即我的equalto操作员工作不正常.

为什么会那样?

Vin*_*rat 25

在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')
Run Code Online (Sandbox Code Playgroud)

要么

<= to_date('08-06-2010 23:59:59', 'dd-MM-yyyy hh24:mi:ss')
Run Code Online (Sandbox Code Playgroud)

注意 - 我更正了您的日期格式:MON如果您想使用缩写的月份名称,则需要使用.我建议使用MM,以便当有人更改其客户端设置(NLS_DATE_LANGUAGE)时,您不会收到错误.也更喜欢使用YYYY而不是YY.


Suj*_*jee 13

检查一下,

select to_date('08-Jun-2010', 'dd-MON-yyyy') from dual;
Run Code Online (Sandbox Code Playgroud)

它等于2010-06-08 00:00:00.注意时间.

所述updated_date具有时间部分.要包含它们,请使用此查询,

select * from asd where trunc(updated_date) <= to_date('08-Jun-2010', 'dd-MON-yyyy');
Run Code Online (Sandbox Code Playgroud)

TRUNCdate参数的默认函数将删除时间.

请参阅Trunc