【问题标题】:Date query giving two results in sqlplus & oracle sql developer在 sqlplus 和 oracle sql developer 中给出两个结果的日期查询
【发布时间】: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


【解决方案1】:

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

要解决这个问题,请在 where 子句的两边都使用 to_date,如下所示。

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

希望这会有所帮助!!

【讨论】:

    猜你喜欢
    • 2012-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-20
    • 2021-01-08
    相关资源
    最近更新 更多