Oracle SQL - 具有unix时间戳的列,需要dd-mm-yyyy时间戳

时间:2010-03-08 13:00:31

标签: sql oracle

在Oracle中有什么方法可以从oracle中的unix时间戳中获取dd-mm-yyyy部分吗?

喜欢:

select to_char(my_timestamp, 'ddmmyyyy') as my_new_timestamp from table

4 个答案:

答案 0 :(得分:3)

鉴于此数据......

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>

答案 1 :(得分:2)

据我了解,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;

答案 2 :(得分:1)

我相信它是:

select to_char(my_timestamp, 'dd-mm-yyyy') as my_new_timestamp from table

另请参阅有关Oracle日期格式说明符的this reference

答案 3 :(得分:0)

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 日以来本地时区的秒数。错了。