Ответ 1
Используйте интервал вместо целого числа:
SELECT *
FROM table
WHERE auth_user.lastactivity > CURRENT_TIMESTAMP - INTERVAL '100 days'
В 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
Как я могу решить?
Используйте интервал вместо целого числа:
SELECT *
FROM table
WHERE auth_user.lastactivity > CURRENT_TIMESTAMP - INTERVAL '100 days'
Вы также можете использовать now()
в Postgres. Проблема в том, что вы не можете добавлять/вычитать целые числа из timestamp
или timestamptz
. Вы можете сделать так, как Марк Байерс предлагает и вычитать интервал, или использовать тип date
, который позволяет вам добавлять/вычитать целые числа
SELECT now()::date + 100 AS date1, current_date - 100 AS date2
Вот пример...
select * from tablename where to_char(added_time, 'YYYY-MM-DD') = to_char( now(), 'YYYY-MM-DD' )
added_time - это имя столбца, которое я преобразовал в char для соответствия
Вот что говорит MySQL о NOW()
:
Возвращает текущую дату и время в качестве значения в "ГГГГ-ММ-ДД ЧЧ: ММ: СС" или YYYYMMDDHHMMSS.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;
Но это было бы очень плохой идеей, что вам нужно понять, так это то, что времена и даты - это не глупые неотформатированные числа, это их собственный тип с их собственным набором функций и operators
Таким образом, время MySQL по существу позволяет рассматривать NOW()
как тип dumber или переопределяет +
, чтобы сделать предположение, которое я не могу найти в документах MySQL. В любом случае вы, вероятно, захотите посмотреть типы date
и interval
в pg.
select * from table where column_date > now()- INTERVAL '6 hours';