0

Postres データベースがあり、2 つのタイムスタンプ フィールドを比較したいと考えています。

基本的なクエリ:

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 ) 
4

3 に答える 3

1

サンプル値は、timenotのテキスト表現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');

しかし、これはほとんど意味がありません...

于 2014-04-28T21:05:20.683 に答える
0

少なくとも1日は与える必要があります。例:

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

与える

date_part
------------
 1278358698
于 2010-07-05T13:10:52.757 に答える
0

あなたはそれらをキャストすることができます:

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

フィールドの形式が正しい限り、時間、日付、タイムスタンプなどにキャストできることに注意してください。

テキスト フィールドを日付、時刻、またはタイムスタンプ フィールドに変換する方がはるかに優れています。

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