我有一个Postres数据库,想要比较两个时间戳字段。
基本查询:
select t1.valu1, t1.valu2 from table1 as t1 where t1.valu1 == t1.valu2
使用时间戳比较:
select t1.valu1, t1.valu2 from table1 as t1
where EXTRACT(EPOCH FROM TIMESTAMP WITH TIME ZONE t1.valu1 )
== EXTRACT(EPOCH FROM TIMESTAMP WITH TIME ZONE t1.valu2 )
valu1
的示例值:
'14:50:15'
,'10:50:15'
valu2
:
'11:10:15'
,'17:50:15'
我想将valu1
和valu2
转换为时间戳并在之后进行比较。
// syntax of extract
EXTRACT(EPOCH FROM TIMESTAMP WITH TIME ZONE '20:38:18');
我收到以下格式的错误:
EXTRACT(EPOCH FROM TIMESTAMP WITH TIME ZONE t1.valu2 )
答案 0 :(得分:1)
您的样本值是time
而非timestamp
的文字表示:
'14:50:15', '10:50:15', '11:10:15', '17:50:15'
根据以后的评论假设text
为源类型。
将它们投入时间以消除无关紧要的空白区域或从比较中领先0是有意义的。但对于简单的演员表,它必须是有效的时间格式:
SELECT valu1, valu2
FROM table1
WHERE valu1::time = valu2::time
如果你真的想比较“作为时间戳”,你需要使用匹配格式模式的to_timestamp()
:
SELECT valu1, valu2
FROM table1
WHERE to_timestamp(valu1, 'HH24:MI:SS')
= to_timestamp(valu2, 'HH24:MI:SS');
但这几乎没有任何意义......
答案 1 :(得分:0)
你必须至少给一天,例如:
select EXTRACT(EPOCH FROM '2010-07-05 20:38:18'::timestamptz);
给出
date_part ------------ 1278358698
答案 2 :(得分:0)
你可以施展它们:
select dateintext1::timestamp - dateintext2::timestamp from ...
请注意,您可以转换为时间,日期,时间戳等。只要字段中的格式正确。
将文本字段转换为日期,时间或时间戳字段要好得多。
alter table abc alter column texttime type timestamp using (texttime::timestamp);