【发布时间】:2020-12-31 01:08:22
【问题描述】:
Oracle 中是否有任何方法可以从 oracle 中的 unix 时间戳中仅获取 dd-mm-yyyy 部分?
喜欢:
select to_char(my_timestamp, 'ddmmyyyy') as my_new_timestamp from table
【问题讨论】:
Oracle 中是否有任何方法可以从 oracle 中的 unix 时间戳中仅获取 dd-mm-yyyy 部分?
喜欢:
select to_char(my_timestamp, 'ddmmyyyy') as my_new_timestamp from table
【问题讨论】:
鉴于这些数据...
SQL> alter session set nls_date_format='dd-mon-yyyy hh24:mi:ss'
2 /
Session altered.
SQL> select * from t23
2 /
MY_TIMESTAMP
--------------------
08-mar-2010 13:06:02
08-mar-2010 13:06:08
13-mar-1985 13:06:26
SQL>
.. 只需将the time elapsed since 01-JAN-1970 转换为秒:
SQL> select my_timestamp
2 , (my_timestamp - date '1970-01-01') * 86400 as unix_ts
3 from t23
4 /
MY_TIMESTAMP UNIX_TS
-------------------- ----------
08-mar-2010 13:06:02 1268053562
08-mar-2010 13:06:08 1268053568
13-mar-1985 13:06:26 479567186
SQL>
【讨论】:
据我了解,Unix 时间戳定义为自 1970-01-01 以来的秒数,在这种情况下:
select DATE '1970-01-01' + my_timestamp/86400 from table;
(一天有86400秒。)
忽略小时、分钟和秒:
select TRUNC(DATE '1970-01-01' + my_timestamp/86400) from table;
但是,如果你想要的是一个“截断”的 Unix 时间戳,那么试试这个:
select floor(my_timestamp/84600)*84600 from dual;
【讨论】:
我相信是:
select to_char(my_timestamp, 'dd-mm-yyyy') as my_new_timestamp from table
另请参阅this reference,了解 Oracle 的日期格式说明符。
【讨论】:
Unix 时间戳是自 1970 年 1 月 1 日以来的秒数。(UTC)。
要获取现在的 Unix 时间戳,请尝试以下 sql:
select (CAST(SYS_EXTRACT_UTC(current_timestamp) AS date) - to_date('1970-01-01', 'YYYY-MM-DD')) * 86400 FROM dual;
您可以将current_timestamp 替换为任何时间戳值。
顺便说一句,自 1970 年 1 月 1 日以来,一些答案似乎返回了本地时区的秒数。错了。
【讨论】: