我有一个像 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
如何从所有用户的列中仅提取时间值?
提前致谢!
答案 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;