使用带时区的时间戳提取日期
Posted
技术标签:
【中文标题】使用带时区的时间戳提取日期【英文标题】:Extract Date with a Timestamp with timezone 【发布时间】:2018-09-18 04:52:30 【问题描述】:如何将以下时间戳转换为简单日期?
Thu Nov 29 18:00:00 CST 2018
Thu Apr 26 01:00:00 BST 2018
【问题讨论】:
欢迎来到***!!! 请具体说明“转换”是什么意思。您是将这些存储在时间戳列中还是存储为字符串? 对你来说什么是简单的约会?问是因为我不认为这是 Oracle SQL 中已知的概念。 【参考方案1】:如果您将空格分隔的值假定为数组,则此代码实际上按空格拆分数据并从指定索引中提取值。 然后将其合并并转换为日期格式
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;
从您的 cmets 更新代码以添加 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”
【讨论】:
如果我想在提取的日期中添加格林威治标准时间上午 8:00 怎么办?【参考方案2】:这将起作用:
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;
【讨论】:
以上是关于使用带时区的时间戳提取日期的主要内容,如果未能解决你的问题,请参考以下文章
在带有/不带时区的日期或时间戳的查询中处理 generate_series()