Dans mysql je suis capable de faire ceci:
SELECT *
FROM table
WHERE auth_user.lastactivity > NOW() - 100
maintenant dans postgresql j'utilise cette requête:
SELECT *
FROM table
WHERE auth_user.lastactivity > CURRENT_TIMESTAMP - 100
mais je reçois cette erreur:
operator does not exist: timestamp with time zone - integer
Comment puis-je résoudre?
Utilisez un intervalle au lieu d'un entier:
SELECT *
FROM table
WHERE auth_user.lastactivity > CURRENT_TIMESTAMP - INTERVAL '100 days'
Vous pouvez également utiliser now()
dans Postgres. Le problème est que vous ne pouvez pas ajouter/soustraire des entiers de timestamp
ou timestamptz
. Vous pouvez soit faire ce que Mark Byers suggère et soustraire un intervalle, soit utiliser le type date
qui vous permet d'ajouter/soustraire des entiers.
SELECT now()::date + 100 AS date1, current_date - 100 AS date2
Voici ce que la documentation MySQL dit à propos de NOW()
:
Renvoie la date et l'heure actuelles sous forme de valeur au format 'AAAA-MM-JJ HH: MM: SS' ou YYYYMMDDHHMMSS.uuuuuu, selon que la fonction est utilisée dans un contexte de chaîne ou numérique. La valeur est exprimée dans le fuseau horaire actuel.
mysql> SELECT NOW();
-> '2007-12-15 23:50:26'
mysql> SELECT NOW() + 0;
-> 20071215235026.000000
Maintenant, vous pouvez certainement réduire votre date intelligente à quelque chose de moins ...
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;
Mais, ce serait une très mauvaise idée. Ce que vous devez comprendre, c’est que les heures et les dates ne sont pas des nombres non formatés stupides, ce sont leurs propre type avec leurs propre ensemble de fonctions = et opérateurs
Donc, le temps MySQL vous permet essentiellement de traiter NOW()
comme un type plus bête, ou il remplace +
Pour présumer que je ne trouve pas dans la documentation MySQL. Quoi qu'il en soit, vous voudrez probablement examiner les types date
et interval
dans pg.
Voici un exemple ...
select * from tablename where to_char(added_time, 'YYYY-MM-DD') = to_char( now(), 'YYYY-MM-DD' )
added_time est un nom de colonne que j'ai converti en caractère pour la correspondance