Ответ 1
SELECT EXTRACT(EPOCH FROM (Day || ' ' || Time)::timestamp);
У меня есть дневные и временные поля в базе данных. Я хочу получить отметку времени, объединяя день и время. Как это сделать в PostgreSQL?
Я сделал это:
SELECT EXTRACT(EPOCH FROM TIMESTAMP '2011-05-17 10:40:28');
И он работает нормально.
Но когда я попытался заменить поля дня и времени, я получаю следующую ошибку:
SELECT EXTRACT(EPOCH FROM TIMESTAMP Day || ' ' || Time);
ERROR: syntax error at or near "Day" LINE 1: ...quest_count > 0 AND (EXTRACT(EPOCH FROM TIMESTAMP Day || ' ' || Time)) > (e...
SELECT EXTRACT(EPOCH FROM (Day || ' ' || Time)::timestamp);
date
и time
типыЕсли ваш Day
имеет тип date
, а ваш time
имеет тип time
, существует очень простое решение:
SELECT EXTRACT(EPOCH FROM (day + time));
Вы можете просто добавить date
и time
, чтобы получить timestamp [without time zone]
(который интерпретируется в соответствии с настройкой часового пояса вашего сеанса).
И, строго говоря, извлечение эпохи не связано с вашим вопросом как таковым. date
+ time
приведет к timestamp
, что он.
Если вы говорите о строковых литералах или столбцах text
/varchar
, используйте:
SELECT EXTRACT(EPOCH FROM ('2013-07-18' || ' ' || '21:52:12')::timestamp);
или
SELECT EXTRACT(EPOCH FROM cast('2013-07-18' ||' '|| '21:52:12' AS timestamp));
Ваша форма не работает
SELECT EXTRACT(EPOCH FROM TIMESTAMP ('2013-07-18' || ' ' || '21:52:12'));
Это будет работать:
SELECT EXTRACT(EPOCH FROM "timestamp" ('2013-07-18' || ' ' || '21:52:12'));
Я цитирую руководство по типу casts:
Также можно указать тип с использованием функции Синтаксис:
typename ( expression )
Однако это работает только для типов, имена которых также действительны как имена функций. Например,
double precision
нельзя использовать таким образом, но эквивалентfloat8
может. Кроме того, именаinterval
,time
иtimestamp
может использоваться только таким образом, если они имеют двойные кавычки, из-за синтаксических конфликтов. Поэтому использование функциональный синтаксис приводит к несогласованности и, вероятно, должен следует избегать.
Смелый акцент мой.
Суть его: скорее используйте один из первых двух вариантов синтаксиса.
Это прекрасно работает для меня:
SELECT CONCAT(Day,' ',Time)::timestamp;