我试图从下面显示的特定日期获取所有记录,但似乎日期的格式是朱利安日期(我不能不幸地改变)
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
答案 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');
2456143
SQL>从双重选择to_date(2456143,' J');
03-AUG-2012 00:00:00