С этого времени () к Current_timestamp в Postgresql

В mysql я могу сделать это:

SELECT *
FROM table
WHERE auth_user.lastactivity > NOW() - 100

теперь в postgresql я использую этот запрос:

SELECT *
FROM table
WHERE auth_user.lastactivity > CURRENT_TIMESTAMP - 100

но я получаю эту ошибку:

operator does not exist: timestamp with time zone - integer

Как я могу решить?

67
задан OMG Ponies 7 June 2010 в 22:24
поделиться

3 ответа

Используйте интервал вместо целого числа:

SELECT *
FROM table
WHERE auth_user.lastactivity > CURRENT_TIMESTAMP - INTERVAL '100 days'
122
ответ дан 24 November 2019 в 14:31
поделиться

Вы также можете использовать now () в Postgres. Проблема в том, что вы не можете складывать / вычитать целые числа из отметки времени или отметки времени . Вы можете либо сделать, как предлагает Марк Байерс, и вычесть интервал, либо использовать тип дата , который позволяет вам складывать / вычитать целые числа

SELECT now()::date + 100 AS date1, current_date - 100 AS date2
31
ответ дан 24 November 2019 в 14:31
поделиться

Вот что говорится в документации MySQL о NOW () :

Возвращает текущую дату и время в виде значения в формате 'ГГГГ-ММ-ДД ЧЧ: ММ : SS 'или ГГГГММДДЧЧММСС.uuuuuu формат, в зависимости от того, является ли функция используется в строковом или числовом контексте. Значение выражается в текущем часовой пояс.

mysql> SELECT NOW();
        -> '2007-12-15 23:50:26'
mysql> SELECT NOW() + 0;
        -> 20071215235026.000000

Теперь вы, конечно, можете сократить свое умное свидание до чего-то меньшего ...

SELECT (
 date_part('year', NOW())::text
 || date_part('month', NOW())::text
 || date_part('day', NOW())::text
 || date_part('hour', NOW())::text
 || date_part('minute', NOW())::text
 || date_part('second', NOW())::text
)::float8 + foo;

Но это было бы действительно плохой идеей, вам нужно понять, что время и дата - это не глупые неформатированные числа, это их собственный тип с их собственным набором функций и операторов

Таким образом, время MySQL по существу позволяет вам рассматривать NOW () как более тупой тип, или он переопределяет + , чтобы сделать предположение, которое я не могу найти в документации MySQL. В любом случае, вы, вероятно, захотите посмотреть типы date и interval в pg.

5
ответ дан 24 November 2019 в 14:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: