从列中提取时间

时间:2017-05-18 08:44:56

标签: sql oracle

我有一个像 last_located_time 这样的列,其中包含类似的值 的 2017-05-13T17:33:36.000+0000 即可。

我试图只删除时间,但没有运气。

SELECT USERNAME, TO_DATE(SUBSTR(LAST_LOCATED_TIME,11,17),'HH:MI:SS') "lAST TIME"
FROM Tb_089

如何从所有用户的列中仅提取时间值?

提前致谢!

2 个答案:

答案 0 :(得分:2)

如果您想要UTC时区中的时间组件(所以所有时间都显示在公共时区),那么:

(假设您有TIMESTAMP WITH TIME ZONE数据类型)

SELECT TO_CHAR(
         last_located_time AT TIME ZONE 'UTC',
         'HH24:MI:SS'
       )
FROM   Tb_089;

相反,如果您的列是ISO 8601格式的字符串:

SELECT TO_CHAR(
         TO_TIMESTAMP_TZ(
           last_located_time,
           'YYYY-MM-DD"T"HH24:MI:SS.FFTZHTZM'
         ) AT TIME ZONE 'UTC',
         'HH24:MI:SS'
       )
FROM   Tb_089;

如果您希望将时间组件作为间隔:

SELECT CAST( utc_last_located_time AS TIMESTAMP ) - TRUNC( utc_last_located_time )
         AS time_interval
FROM   (
  SELECT TO_TIMESTAMP_TZ(
           last_located_time,
           'YYYY-MM-DD"T"HH24:MI:SS.FFTZHTZM'
         ) AT TIME ZONE 'UTC' AS utc_last_located_time
  FROM   Tb_089
);

如果你想要字符串的时间成分(不调整不同的时区),你可以这样做:

SELECT SUBSTR( last_located_time, 12, 8 )
FROM   Tb_089

答案 1 :(得分:0)

To_Date用于将Char和Varchar2转换为Date。

您需要使用与To_Date相反的To_Char

Select To_Char(LAST_LOCATED_TIME, 'HH24:MI:SS') "Last Time" from Tb_089;