将大量数字转换为日期会在 Oracle Sql 中产生意外结果

问题描述 投票:0回答:1

我正在从 Restful 服务中获取 JSON 正文。其中一项数据是Paid_at:1696484073(num)。我需要把它变成一个日期。

我试过:

SELECT TO_timestamp( '1970-01-01', 'YYYY-MM-DD' ) + NUMTODSINTERVAL( nvl(l_payment_date,0), 'SECOND' )
into l_payment_date_trans 
FROM DUAL;

返回 10/05/23,那是不对的

l_payment_date_str := to_char(l_payment_date);
l_payment_date_trans := TO_DATE(to_char(l_payment_date_str), 'YYYY-MM-DD');

没工作

SELECT TO_DATE(to_char(l_payment_date_str), 'YYYY-MM-DD')
into l_payment_date_trans 
FROM DUAL;

返回 03/02/15,我认为那是不对的。

如何将该数字(“l_ payment_date”)转换为日期并将该值分配给l_ payment_date_trans?

sql oracle plsql apex
1个回答
0
投票

为什么你认为你得到的值不对?因为你没有看到时间部分?好吧,也许这与您的 client 有关,它当前设置为仅显示日期值。如果您设置正确(如下面的示例所示),您会发现它实际上是正确的。

SQL> alter session set nls_date_format = 'dd.mm.yyyy hh24:mi:ss';

Session altered.

SQL> alter session set nls_timestamp_format = 'dd.mm.yyyy hh24:mi:ss.ff6';

Session altered.

SQL> select date '1970-01-01' + (&&your_value / 86400 ) result_date,
  2         --
  3         timestamp '1970-01-01 00:00:00' + numtodsinterval (&your_value, 'second' ) result_timestamp
  4  from dual;
Enter value for your_value: 1696484073

RESULT_DATE         RESULT_TIMESTAMP
------------------- --------------------------------------------------
05.10.2023 05:34:33 05.10.2023 05:34:33.000000

SQL>
© www.soinside.com 2019 - 2024. All rights reserved.