使用带时区的时间戳提取日期

时间:2018-09-18 04:52:31

标签: sql oracle oracle10g to-date

如何将以下时间戳转换为简单日期?

Thu Nov 29 18:00:00 CST 2018
Thu Apr 26 01:00:00 BST 2018

2 个答案:

答案 0 :(得分:0)

如果您假设将空格分隔的值作为数组,那么此代码实际上是按空间分割数据并从指定的索引中提取值。 然后将其组合并转换为日期格式

SELECT to_date(
       REGEXP_SUBSTR('Thu Nov 29 18:00:00 CST 2018', '[^ ]+', 1, 3)  ||' '||
       REGEXP_SUBSTR('Thu Nov 29 18:00:00 CST 2018', '[^ ]+', 1, 2)  ||' '||
      REGEXP_SUBSTR('Thu Nov 29 18:00:00 CST 2018', '[^ ]+', 1, 6),'DD-MM-YYYY' )
FROM dual ;

您也可以这样使用:

SELECT to_date(
       REGEXP_SUBSTR(columnname, '[^ ]+', 1, 3)  ||' '||
       REGEXP_SUBSTR(columnname, '[^ ]+', 1, 2)  ||' '||
      REGEXP_SUBSTR(columnname, '[^ ]+', 1, 6),'DD-MM-YYYY' )
FROM tablename;

更新了您评论中的代码,以添加HH:MM AM / PM cst / gst:

SELECT to_char(to_timestamp(
       REGEXP_SUBSTR('Thu Nov 29 18:00:00 CST 2018', '[^ ]+', 1, 3)  ||' '||
       REGEXP_SUBSTR('Thu Nov 29 18:00:00 CST 2018', '[^ ]+', 1, 2)  ||' '||
       REGEXP_SUBSTR('Thu Nov 29 18:00:00 CST 2018', '[^ ]+', 1, 6)  ||' '||
       REGEXP_SUBSTR('Thu Nov 29 18:00:00 CST 2018', '[^ ]+', 1, 4)
      ,'DD-MM-YYYY hh24:mi:ss' ),'DD-MM-YYYY HH:MI AM'  )||' '||
       REGEXP_SUBSTR('Thu Nov 29 18:00:00 CST 2018', '[^ ]+', 1, 5)     
FROM dual ;

注意:仅当您列中的所有数据均采用上述格式时,此方法才有效。

输出将是一个简单的日期,像这样:'29 -11-2018' 如果您希望输出为'29 -NOV-2018',则可以将代码替换为'DD-MON-YYYY'

答案 1 :(得分:-1)

这将起作用:

select trunc(systimestamp), systimestamp from dual; 

也可以使用:

Select to_char(to_date('15-JUN-16 22:54:39','DD-MON-YY 
HH24:MI:SS'),'DD-MON-YY') from dual;