【问题标题】:How to get the epoch in PL/SQL? [duplicate]如何在 PL/SQL 中获取 epoch? [复制]
【发布时间】:2015-07-24 13:14:45
【问题描述】:

我想以毫秒(纪元)为单位将当前时间插入到表中。有没有我可以使用的内置函数来给我时间?

【问题讨论】:

  • 当前时间需要什么精度 - 以秒为单位(来自 sysdate,因此您的 epoch 值始终以 000 结尾)或毫秒(来自 systimestamp)?这会稍微影响这是哪个问题的重复。
  • 回答您提出的问题 - 不,没有内置函数可以提供自 1970 年 1 月 1 日午夜以来的毫秒数。
  • 问题的措辞好像要将当前的Oracle时间转换成一个epoch值;你选择的副本是另一种方式。你想做什么?
  • OP 的问题是将日期转换为纪元,选择为重复的问题反之亦然。

标签: sql oracle


【解决方案1】:

这将为您提供自 1970 年 1 月 1 日以来的毫秒数:

select (sysdate - to_date('01-Jan-1970', 'dd-Mon-yyyy')) *24*60*60*1000 from dual

【讨论】:

  • 最好不要使用与语言相关的日期格式。您的查询将失败,例如在法国电脑上。最好使用 ISO 格式,例如1970-01-01
  • @a_horse_with_no_name - 好点。当最后两个数量表示为数字时,您能否建议一种与语言无关且不会出现可能混淆月份和日期的问题的日期格式?
  • @BobJarvis ANSI 日期文字 DATE 'YYYY-MM-DD' 或者,明确提及 NLS_DATE_LANGUAGE 参数值。或者,我是否在您的问题中遗漏了什么?
  • @BobJarvis:ANSI 日期文字(和 ISO 格式)需要 yyyy-mm-ddDATE '2015-03-07' 在定义上并不模棱两可。老实说,我从未见过指定为yyyy-dd-mm 的日期。如果日期以年份开头,则它始终(根据我的经验)是 ISO 格式。
  • @BobJarvis:这就是为什么 ANSI/ISO 日期文字只指定一种格式 DATE 'yyyy-mm-dd',这恰好是日期的国际标准 :-)
【解决方案2】:

牢记时区

SQL> SELECT
  2     EXTRACT(DAY FROM (from_tz(CAST(SYSDATE AS TIMESTAMP), SESSIONTIMEZONE) AT TIME ZONE 'UTC' -TIMESTAMP '1970-01-01 00:00:00 +00:00'))*86400+
  3     EXTRACT(HOUR FROM (from_tz(CAST(SYSDATE AS TIMESTAMP), SESSIONTIMEZONE) AT TIME ZONE 'UTC' -TIMESTAMP '1970-01-01 00:00:00 +00:00'))*3600+
  4     EXTRACT(MINUTE FROM (from_tz(CAST(SYSDATE AS TIMESTAMP), SESSIONTIMEZONE) AT TIME ZONE 'UTC' -TIMESTAMP '1970-01-01 00:00:00 +00:00'))*60+
  5     EXTRACT(SECOND FROM (from_tz(CAST(SYSDATE AS TIMESTAMP), SESSIONTIMEZONE) AT TIME ZONE 'UTC' -TIMESTAMP '1970-01-01 00:00:00 +00:00')) date_to_epoch
  6  FROM dual;

DATE_TO_EPOCH
-------------
   1431513604

【讨论】:

  • 为什么是CAST(CURRENT_TIMESTAMP AS TIMESTAMP)current_timestamp 已经一个时间戳。
  • @a_horse_with_no_name - 我使用的是 SYSDATE :-) 感谢您的指点。
  • 你可以使用sys_extract_utc(sysdate),它比`from_tz(CAST(SYSDATE AS TIMESTAMP), SESSIONTIMEZONE) AT TIME ZONE 'UTC'`短`
猜你喜欢
  • 2012-07-14
  • 2020-04-08
  • 1970-01-01
  • 2020-03-14
  • 1970-01-01
  • 1970-01-01
  • 2016-05-28
  • 2013-11-13
  • 1970-01-01
相关资源
最近更新 更多