Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle SQL-带有unix时间戳的列,需要dd mm yyyy时间戳_Sql_Oracle - Fatal编程技术网

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

Oracle SQL-带有unix时间戳的列,需要dd mm yyyy时间戳,sql,oracle,Sql,Oracle,在Oracle中,有没有办法只从Oracle中的unix时间戳中获取dd-mm-yyyy部分 比如: select to_char(my_timestamp, 'ddmmyyyy') as my_new_timestamp from table 我认为: select to_char(my_timestamp, 'dd-mm-yyyy') as my_new_timestamp from table 另请参见Oracle的日期格式说明符。据我所知,Unix时间戳定义为自1970-01-01以

在Oracle中,有没有办法只从Oracle中的unix时间戳中获取dd-mm-yyyy部分

比如:

select to_char(my_timestamp, 'ddmmyyyy') as my_new_timestamp from table
我认为:

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

另请参见Oracle的日期格式说明符。

据我所知,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;
鉴于这些数据

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> 
。。只需将时间转换为秒:

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年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;
您可以用任何时间戳值替换当前时间戳


顺便说一句,一些答案似乎在1970年1月1日起以当地时区返回秒数。这是错误的。

我的问题是:在此之后,它需要unix时间戳,而不是oracle日期;)