Oracle SQL - 带有Unix时间戳的列,需要转换为dd-mm-yyyy时间戳

4

在Oracle中,是否有一种方法可以从Unix时间戳中仅获取dd-mm-yyyy部分?

例如:

select to_char(my_timestamp, 'ddmmyyyy') as my_new_timestamp from table
4个回答

4
给定这些数据...
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> 

..仅仅是把从1970年1月1日至今的时间间隔转换为秒:

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>

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;

我的问题是:在此之后,它需要一个Unix时间戳而不是Oracle日期 ;) - opHASnoNAME

1

我相信它是:

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

请参阅 Oracle 的日期格式说明符上的this reference


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日以来的秒数,带有本地时区。这是错误的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接