【发布时间】:2020-09-21 12:24:14
【问题描述】:
我遇到了一个错误,我的一个表格中的某些日期显示为当年超过 10,000 个。例如查询
SELECT
my_date, to_char(my_date),
(my_date - TO_DATE('1970-01-01','YYYY-MM-DD') ) * 86400,
extract(year from my_date)
FROM my_table
返回:
01-NOV-74 00-000-00 413548617599.9999999999999999999999999997 15074
15-AUG-68 00-000-00 366017127719.9999999999999999999999999999 13568
30-SEP-62 00-000-00 375298841999.9999999999999999999999999998 13862
29-SEP-82 00-000-00 325438773599.9999999999999999999999999998 12282
01-AUG-13 01-AUG-13 1375315200 2013
知道这里发生了什么吗?最后一个日期看起来不错,但其余日期已关闭。是我不知道 Oracle 在内部使用的某种日期格式吗?还是在此表中输入的日期不正确,我无法检索到实际值?
【问题讨论】:
-
该列是
DATE列还是TIMESTAMP列?DATETIME不是 Oracle 中列定义的有效类型。DATE列也包括捕获时间。找出列的数据类型是解决问题的第一步。 -
对不起,应该更清楚。该列的类型为
DATE。我还用更多细节更新了问题。 -
如果您尝试生成一个 5 位数字的日期,那么您会收到错误消息 (db<>fiddle),但我链接的副本显示,理论上,它可以存储最多 15599 年的日期但是这样做会使像
TO_CHAR这样的内置函数失败(优雅地)。 ... -
您可以使用链接的副本来获取年、月、日、小时、分钟或秒的值,但如果您希望检索 4 位数的年份,那么您将不走运,因为行有5 位数的年份,您必须删除行或将其编辑为合理的值,
-
PostgreSQL 可以处理 10000 年以上的日期并返回
15074-11-01 08:00:00 13568-08-15 08:22:00 13862-09-30 14:20:00 12282-09-29 11:20:00您是如何设法将这些日期导入 Oracle 的? dbfiddle.uk/…