От Now () к Current_timestamp в Postgresql - PullRequest
63 голосов
/ 08 июня 2010

В 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

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

Ответы [ 5 ]

117 голосов
/ 08 июня 2010

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

SELECT *
FROM table
WHERE auth_user.lastactivity > CURRENT_TIMESTAMP - INTERVAL '100 days'
29 голосов
/ 08 июня 2010

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

SELECT now()::date + 100 AS date1, current_date - 100 AS date2
4 голосов
/ 05 февраля 2015

Вот пример ...

select * from tablename where to_char(added_time, 'YYYY-MM-DD')  = to_char( now(), 'YYYY-MM-DD' )

добавлено время - это имя столбца, которое я преобразовал в char для совпадения

4 голосов
/ 08 июня 2010

Вот что говорит MySQL о NOW():

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

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.

0 голосов
/ 25 июля 2017
select * from table where column_date > now()- INTERVAL '6 hours';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...