oracle Convert timestamp to Epoch date in pl/sql in stored procedure [closed]

yuvru6vn  于 2022-11-03  发布在  Oracle
关注(0)|答案(2)|浏览(186)

已关闭。此问题需要details or clarity。当前不接受答案。
**想要改进此问题吗?**通过editing this post添加详细信息并阐明问题。

19天前关闭。
Improve this question
我想将时间戳转换为纪元日期。

  1. SELECT (CAST(timestamp '2022-10-13 00:00:00' AT TIME ZONE 'UTC' AS date) - date '1970-01-01') * 86400 * 1000 EPOCH_FROM_DATE
  2. FROM DUAL;

这解决了我的目的。
但我希望这样:

  1. SELECT (CAST(timestamp (to_char(sysdate, 'YYYY-MM-DD') || ' 00:00:00') AT TIME ZONE 'UTC' AS date) - date '1970-01-01') * 86400 * 1000 EPOCH_FROM_DATE
  2. FROM DUAL;

出现错误!

c3frrgcw

c3frrgcw1#

如果您希望:

  • UTC时区中从当天午夜开始的历元,然后使用SYSTIMESTAMP并将其转换为UTC时区,然后使用TRUNC
  • 然后,从本地时区的午夜开始的历元使用X1 M3 N1 X,并在转换为X1 M5 N1 X之前转换为X1 M4 N1 X,然后转换回X1 M6 N1 X:
  1. SELECT (
  2. TRUNC(SYSTIMESTAMP AT TIME ZONE 'UTC')
  3. - date '1970-01-01'
  4. ) * 86400 * 1000 AS EPOCH_MIDNIGHT_UTC,
  5. (
  6. CAST(
  7. CAST(TRUNC(SYSDATE) AS TIMESTAMP WITH TIME ZONE)
  8. AT TIME ZONE 'UTC'
  9. AS DATE
  10. )
  11. - date '1970-01-01'
  12. ) * 86400 * 1000 AS EPOCH_MIDNIGHT_CURRENT_TZ
  13. FROM DUAL;

输出:
| 世界协调时午夜纪元|终点_午夜_当前_TZ|
| - -|- -|
| 1665705600000美元|小行星1665702000000|
fiddle

展开查看全部
5hcedyr0

5hcedyr02#

所以这部分就在这里:

  1. timestamp '2022-10-13 00:00:00'

是一个 timestamp literal,而第二部分必须是字符串literal。您不能动态创建它。
您应该改用to_timestamp()函数:

  1. SELECT (CAST(to_timestamp(to_char(sysdate, 'YYYY-MM-DD') || ' 00:00:00', 'yyyy-mm-dd hh24:mi:ss') AT TIME ZONE 'UTC' AS date) - date '1970-01-01') * 86400 * 1000 EPOCH_FROM_DATE
  2. FROM DUAL;

您可以通过省略时间(假定为午夜)来使其稍短一些:

  1. SELECT (CAST(to_timestamp(to_char(sysdate, 'YYYY-MM-DD'), 'yyyy-mm-dd') AT TIME ZONE 'UTC' AS date) - date '1970-01-01') * 86400 * 1000 EPOCH_FROM_DATE
  2. FROM DUAL;

相关问题