Преобразовать поля в метку времени для сравнения

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 ) 
  • 0
    зачем переходить в эпоху?
Теги:
database
plpgsql

3 ответа

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');

Но это вряд ли имеет смысл...

0

Вы можете просто бросить их:

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

Обратите внимание, что вы можете использовать время, дату, временную метку и т.д. Пока правильный формат в поле.

Намного лучше преобразовать текстовые поля в поля даты, времени или времени.

alter table abc alter column texttime type timestamp using (texttime::timestamp);
0

Вы должны дать, по крайней мере, день, например:

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

дает

 date_part
------------
 1278358698
  • 0
    но на сайте pgsql я видел синтаксис, который я использовал, но в примере он указан в кавычках, а мой - значение поля. Так я думаю, что ошибка есть? Но я не знаю, как конвертировать
  • 0
    и мне нужно использовать в где пункт
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню