日期查询在sqlplus&中给出两个结果oracle sql开发人员

时间:2014-11-17 18:23:31

标签: oracle oracle11g oracle-sqldeveloper sqlplus

我在oracle 11g中有以下数据。 Date的数据类型是带时区的时间戳(6)。

  Id         Date

2184597 25-SEP-15 12.00.00.000000000 AM -07:00
2168003 03-NOV-04 12.00.00.000000000 AM -08:00
2179370 03-NOV-04 12.00.00.000000000 AM -08:00
2187826 11-NOV-04 12.00.00.000000000 AM -08:00
2198078 11-NOV-04 12.00.00.000000000 AM -08:00
2198080 11-NOV-04 12.00.00.000000000 AM -08:00

现在我想查找日期大于25-SEP-15的所有记录。我使用以下查询

select id,date from tableName  where (date>=TO_DATE('2015-09-25' , 'yyyy-MM-dd'))

当我从sqlplus客户端和oracle sql developer

触发查询时,我得到了奇怪的结果

在sqlplus客户端我得到了

    2168003 03-NOV-04 12.00.00.000000000 AM -08:00
    2179370 03-NOV-04 12.00.00.000000000 AM -08:00
    2187826 11-NOV-04 12.00.00.000000000 AM -08:00
    2198078 11-NOV-04 12.00.00.000000000 AM -08:00
    2198080 11-NOV-04 12.00.00.000000000 AM -08:00

在Oracle sqldeveloper中我得到了

2184597 25-SEP-15 12.00.00.000000000 AM -07:00
2168003 03-NOV-04 12.00.00.000000000 AM -08:00
2179370 03-NOV-04 12.00.00.000000000 AM -08:00
2187826 11-NOV-04 12.00.00.000000000 AM -08:00
2198078 11-NOV-04 12.00.00.000000000 AM -08:00
2198080 11-NOV-04 12.00.00.000000000 AM -08:00

理想情况下,我只能获得一条记录。但我不确定这是否与时区有关,我该如何纠正呢。

1 个答案:

答案 0 :(得分:0)

这是因为您在where子句中比较了两种不同的数据类型。在您的查询中,字段日期不是我假定的日期。它是DATETIME或TIMESTAMP。

要解决此问题,请在where子句中使用to_date,如下所示。

从tableName选择id,日期,其中TO_DATE(日期,'yyyy-MM-dd')> = TO_DATE('2015-09-25','yyyy-MM-dd');

希望这会有所帮助!!