0

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

3 回答 3

1

您的示例值是timenot的文本表示形式timestamp

'14:50:15', '10:50:15', '11:10:15', '17:50:15'

text根据后面的评论假设为源类型。

将它们转换为 time 以消除比较中无关紧要的空白或前导 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');

但这几乎没有任何意义......

于 2014-04-28T21:05:20.683 回答
0

你可以只施放它们:

select dateintext1::timestamp - dateintext2::timestamp from ...

请注意,您可以转换为时间、日期、时间戳等。只要字段中的格式正确。

将文本字段转换为日期、时间或时间戳字段要好得多。

alter table abc alter column texttime type timestamp using (texttime::timestamp);
于 2010-11-16T00:30:29.533 回答
0

你必须给,至少,一天,例如:

select EXTRACT(EPOCH FROM '2010-07-05 20:38:18'::timestamptz);

日期部分
------------
 1278358698
于 2010-07-05T13:10:52.757 回答