0

我正在尝试从下面显示的特定日期获取所有记录,但日期的格式似乎是儒略日期(不幸的是我无法更改)

  order_date BETWEEN TO_DATE('2015/06/04 10:31:32', 'yyyy/mm/dd hh24:mi:ss') AND TO_DATE('2015/06/04 10:31:32', 'yyyy/mm/dd hh24:mi:ss')

我收到了错误数据类型不一致:预期 NUMBER 得到 DATE。我认为这是因为格式。我不知道如何将 sql 中的上述日期转换为儒略日期。谢谢!

编辑:添加 order_date 示例日期

order_date
1332168537
1332105720
1335616468
4

2 回答 2

0
select 1 from dual where to_number(1) between sysdate -1 and sysdate;

同样的错误。因为 order_date 是 number 并且 db expets number 在 betweene 语句中。
order_date是 unix 风格的日期(自 1970 年以来的第二个)。要转换试试这个。

select order_date/24/60/60 + to_date('1970-01-01','yyyy-mm-dd') from your_table;
于 2015-06-18T09:12:12.153 回答
0

您的日期似乎存储为 00-JAN-1900 的偏移量(数字)。那不是朱利安约会。朱利安日期开始于 01-JAN-4713 BC。Oracle 将儒略起源解释为 01-JAN-4712 BC,可能与不存在的 0 年有关。

请参阅这篇文章 - https://community.oracle.com/thread/2425218

无论如何,您要添加两个数字,将其转换为字符并将其解释为格式为 YYYYDDD 的日期。这仅适用于 1-365 的范围。任何其他数字将导致错误 ORA-01848。

相反,您应该做的是将您的起源作为日期(即 01-01-1900)并添加天数(减去 1,因为您的起源是一次)。sql> select to_date('19000101','YYYYMMDD') + datecolumn_which_is_actually_a_number - 1 from dual; 但真正的 WTF 是将日期存储在数字而不是日期数据类型中。

并考虑:

SQL> select to_char(sysdate,'J') from dual;

TO_CHAR

2456143

SQL> select to_date(2456143,'J') from dual;

TO_DATE(2456143,'J')

2012 年 8 月 3 日 00:00:00

于 2015-06-19T08:44:37.227 回答