【发布时间】:2015-01-14 18:07:28
【问题描述】:
我在 oracle 11g 中有以下数据。 Date 的数据类型是 Timestamp(6) with Timezone。
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
理想情况下,我应该只获得一张记录。但我不确定这是否与时区有关,我该如何纠正它。
【问题讨论】:
-
Date 列的类型是什么?
-
它是带时区的时间戳(6)
-
为什么会有这样的问题?
-
你说:where (date>=TO_DATE('2015-09-25' , 'yyyy-MM-dd'))
-
还有一个强制转换函数,我想你也需要用这些函数在 where 条件下定义时区
标签: oracle oracle11g oracle-sqldeveloper sqlplus