如何使用PLSQL在Julian日期中使用BETWEEN

时间:2015-06-18 08:25:44

标签: date plsql between julian-date

我试图从下面显示的特定日期获取所有记录,但似乎日期的格式是朱利安日期(我不能不幸地改变)

  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中的上述日期转换为julian日期。谢谢!

编辑:添加order_date样本日期

order_date
1332168537
1332105720
1335616468

2 个答案:

答案 0 :(得分:0)

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

同样的错误。因为order_date是number而db在expweene语句中输出数字。
order_date 是unix样式日期(自1970年以来的secound)。要转换试试这个。

select order_date/24/60/60 + to_date('1970-01-01','yyyy-mm-dd') from your_table;

答案 1 :(得分:0)

您的日期似乎存储为00-JAN-1900的偏移量(数字)。 那不是朱利安的约会。朱利安日期始于公元前1月1日至4月13日。甲骨文将朱利安的起源解释为01-JAN-4712 BC,可能与不存在的0年有关。

请参阅此帖子 - https://community.oracle.com/thread/2425218

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

你应该做的是将你的出身作为一个日期(即01-01-1900)并添加一些天数(减去1,因为你的原点是一次性的)。 SQL>选择to_date(' 19000101',' YYYYMMDD')+ datecolumn_which_is_actually_a_number - 1来自dual; 但真正的WTF是以数字而不是日期数据类型存储日期。

并考虑:

SQL>从dual中选择to_char(sysdate,' J');

TO_CHAR

2456143

SQL>从双重选择to_date(2456143,' J');

TO_DATE(2456143,' J&#39)

03-AUG-2012 00:00:00