我在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
理想情况下,我只能获得一条记录。但我不确定这是否与时区有关,我该如何纠正呢。
答案 0 :(得分:0)
这是因为您在where子句中比较了两种不同的数据类型。在您的查询中,字段日期不是我假定的日期。它是DATETIME或TIMESTAMP。
要解决此问题,请在where子句中使用to_date,如下所示。
从tableName选择id,日期,其中TO_DATE(日期,'yyyy-MM-dd')> = TO_DATE('2015-09-25','yyyy-MM-dd');
希望这会有所帮助!!