2013-09-11 3 views
3

У меня есть атрибут timestamp в таблице, на которой я хочу поместить условие в sql-запрос, где значение условия является временной отметкой unix (т. Е. Числовым длинным значением).Postgres сравнить временную метку с длинной временной отметкой unix

[...] table.timestampattr > 6456454654 [...] 

Как это сделать?

ответ

6

Вы можете использовать extract(epoch from ...), чтобы получить временную метку Unix из любого типа времени и даты PostgreSQL (см. Date/Time functions in manual).

Таким образом, ваш фрагмент запроса может быть написано:

[...] extract(epoch from table.timestampattr) > 6456454654 [...] 

В качестве альтернативы, функция to_timestamp выполняет обратную конвертацию, так что вы могли бы также написать:

[...] table.timestampattr > to_timestamp(6456454654) [...] 
+4

Здесь to_timestamp() является лучшим выбором. Он оценивает константу. Извлечение эпохи из столбца временной метки должно оцениваться для каждой строки. –

+0

@ MikeSherrill'Catcall 'Хорошая точка. Ключевым моментом является то, что 'to_timestamp' определяется как' IMMUTABLE', поэтому планировщик запросов должен знать, чтобы запустить его один раз и кэшировать результат. – IMSoP

+1

Обе функции неизменяемы. Разница в том, что в * этом * случае to_timestamp() вызывается с постоянным аргументом, а extract() вызывается с другим аргументом в каждой строке. Если OP сохранил эпоху Unix в таблице и ей нужно было сравнить ее с постоянным значением временной метки типа, то выбор extract() был бы лучшим выбором. –

Смежные вопросы