【问题标题】:Convert Unixtime to Datetime SQL (Oracle)将 Unixtime 转换为 Datetime SQL (Oracle)
【发布时间】:2012-05-11 15:32:45
【问题描述】:

我有一个日期时间字段(P_DT),我想返回 P_DT 大于输入 unix 时间戳的所有结果。

Oracle 是否有任何可以提供帮助的内置函数?

在我的搜索中,我发现从 DateTime 到 Unix 但没有从 Unix 到 DateTime...

【问题讨论】:

  • numtodsinterval('.$_GET["date"].',\'SECOND\')... 你很容易受到 SQL 注入的影响:使用参数化查询而不是直接通过字符串连接传递值。

标签: sql oracle unix-timestamp


【解决方案1】:

没有内置函数。但是写一个相对容易。因为 Unix 时间戳是自 1970 年 1 月 1 日以来的秒数

CREATE OR REPLACE FUNCTION unix_ts_to_date( p_unix_ts IN NUMBER )
  RETURN DATE
IS
  l_date DATE;
BEGIN
  l_date := date '1970-01-01' + p_unix_ts/60/60/24;
  RETURN l_date;
END;

你可以看到它被调用

SQL> select unix_ts_to_date( 1336822620 ) from dual;

UNIX_TS_TO_DATE(133
-------------------
2012-05-12 11:37:00

【讨论】:

  • 我最终使用了 to_date(\'1970-01-01\',\'YYYY-MM-DD\') + numtodsinterval('.$_GET["date"].',\ 'SECOND\') 其中 date 是 unix 时间戳的 url 中的代码。但是您的解决方案更加“官方”
  • Unix 时间戳是自 1970 年 1 月 1 日 00:00:00 UTC 以来的秒数。除非数据库服务器在 UTC 上运行,否则您应该使用 (TIMESTAMP '1970-01-01 00:00:00' AT TIME ZONE 'UTC' + numtodsinterval(p_unix_ts,'second')) AT LOCAL
【解决方案2】:

我最后用了这个……

date=unixtimestamp number

to_date(\'1970-01-01\',\'YYYY-MM-DD\') + numtodsinterval('.$_GET["date"].',\'SECOND\')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-26
    • 1970-01-01
    • 2010-12-12
    • 2020-03-04
    • 1970-01-01
    • 2016-09-18
    • 1970-01-01
    相关资源
    最近更新 更多