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

Extract Date with a Timestamp with timezone

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

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

这会起作用:

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;

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

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'