Подтвердить что ты не робот

Получить временную метку из конкатенаций дневных и временных столбцов

У меня есть дневные и временные поля в базе данных. Я хочу получить отметку времени, объединяя день и время. Как это сделать в 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...
4b9b3361

Ответ 1

SELECT EXTRACT(EPOCH FROM (Day || ' ' || Time)::timestamp);

Ответ 2

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 может использоваться только таким образом, если они имеют двойные кавычки, из-за синтаксических конфликтов. Поэтому использование функциональный синтаксис приводит к несогласованности и, вероятно, должен следует избегать.

Смелый акцент мой.
Суть его: скорее используйте один из первых двух вариантов синтаксиса.

Ответ 3

Это прекрасно работает для меня:

SELECT CONCAT(Day,' ',Time)::timestamp;