【发布时间】:2014-03-14 17:26:59
【问题描述】:
我正在尝试找出表格中日期列中的问题。 数据库是Oracle 11g。
情况是: 当我运行以下查询时:
select to_char(data_val, 'DD/MM/YYYY'), a.data_val from material a order by a.data_val asc;
结果的前五行是:
00/00/0000 | 29/06/5585 00:00:00 00/00/0000 | 29/06/5585 00:00:00 00/00/0000 | 29/06/5585 00:00:00 1111 年 11 月 11 日 | 11/11/1111 00:00:00 1500 年 1 月 1 日 | 01/01/1500 00:00:00问题是:
为什么前三行的 to_char 函数返回不同的日期值(00/00/0000)?
为什么日期 29/06/5585 是 ASC 日期排序的第一个结果?使用:order by data_val DESC 是正确的,不是吗?
【问题讨论】:
-
根据 to_char 返回的值,结果排序正确。我的猜测是 data_val 列不是 Date 数据类型。我不确定 Oracle 可以处理的最小和最大日期是多少,但我认为 1500 为时过早。由于 data_val 不是日期类型,我希望前 3 个给出一些合理的东西,而后两个似乎没有改变,如果 Oracle 不将它们识别为日期,这是一个结果。检查 Oracle 支持的日期范围,以及 to_char 采用的格式(是 MM 月还是分钟?)
-
似乎不是 Oracle 限制。
SELECT TO_CHAR(DATE '5585-06-29', 'MM/DD/YYYY') FROM Dual;工作正常。 -
dava_val 列是日期类型。根据 oracle 文档:Oracle 数据库可以存储儒略时代的日期,范围从公元前 4712 年 1 月 1 日到公元 9999 年 12 月 31 日(共同时代,或“公元”)
-
一定是我们没有看到的东西。你能在 SQLFiddle 上发布一个重现吗?