我有一个表,其中有两列(数据类型是varchar2)有时间戳。我想找出时间戳的区别,即;附加\u列2和附加\u列1之间的时间戳差异。
我的表列:
我尝试下面的代码,但它给我的错误。
SELECT (extract(DAY FROM ADDITIONAL_COLUMN2-ADDITIONAL_COLUMN1)*24*60*60)+
(extract(HOUR FROM ADDITIONAL_COLUMN2-ADDITIONAL_COLUMN1)*60*60)+
(extract(MINUTE FROM ADDITIONAL_COLUMN2-ADDITIONAL_COLUMN1)*60)+
extract(SECOND FROM ADDITIONAL_COLUMN2-ADDITIONAL_COLUMN1) into diff
FROM Table;
错误:缺少关键字。
查询:
SELECT (extract(DAY FROM to_timestamp_tz(ADDITIONAL_COLUMN2)-to_timestamp_tz(ADDITIONAL_COLUMN1))*24*60*60)+
(extract(HOUR FROM to_timestamp_tz(ADDITIONAL_COLUMN2)-to_timestamp_tz(ADDITIONAL_COLUMN1))*60*60)+
(extract(MINUTE FROM to_timestamp_tz(ADDITIONAL_COLUMN2)-to_timestamp_tz(ADDITIONAL_COLUMN1))*60)+
extract(SECOND FROM to_timestamp_tz(ADDITIONAL_COLUMN2)-to_timestamp_tz(ADDITIONAL_COLUMN1))
FROM MISIMD_FOM_SPM_AUDIT;
问题2:
with cte (diff) as (
select to_timestamp_tz(additional_column2, 'YYYY-MM-DD"T"HH24:MI:SS.FFTZH:TZM')
- to_timestamp_tz(additional_column1, 'YYYY-MM-DD"T"HH24:MI:SS.FFTZH:TZM')
as diff
from MISIMD_FOM_SPM_AUDIT
)
select (extract(day from diff)*24*60*60)
+ (extract(hour from diff)*60*60)
+ (extract(minute from diff)*60)
+ extract(second from diff) as diff
from cte;
这个查询提供了所需的输出。查询2的输出
2条答案
按热度按时间smtd7mpg1#
“ora-00905:缺少关键字”错误是因为
into
而不是as
; 改变现状:现在可以了,但是。。。
我换成了。我得到下面的错误ora-30076:提取源的提取字段无效
这意味着您的列实际上不是时间戳,而是字符串,因此您需要首先将它们转换为实际的时间戳:
或者在cte中也进行计算:
db<>小提琴
jhdbpxl92#
我执行以下测试用例,它显然使用了我自己的nls设置:
不能在查询中放入一个into,即pl/sql,而不是sql。这里的问题到底是什么,因为您的查询对我来说是有效的,只要我将。
更新答案
由于您的案例使用varchar2作为timestamp列并存储时区(如果您问我这是没有意义的),所以案例是不同的。您需要对查询应用一个转换,将varchar2转换为正确的时间戳。
在这里您可以看到,这些值存储为varchar2,但带有时区格式的时间戳。
现在,与您之前使用的查询相同
希望有帮助。