将字段转换为时间戳以进行比较

时间:2010-07-05 13:05:07

标签: php mysql database postgresql plpgsql

我有一个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'

我想将valu1valu2转换为时间戳并在之后进行比较。

// syntax of extract
EXTRACT(EPOCH FROM TIMESTAMP WITH TIME ZONE '20:38:18');

我收到以下格式的错误:

EXTRACT(EPOCH FROM TIMESTAMP WITH TIME ZONE  t1.valu2 ) 

3 个答案:

答案 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);