web-dev-qa-db-fra.com

De maintenant () à Current_timestamp dans Postgresql

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?

63
xRobot

Utilisez un intervalle au lieu d'un entier:

SELECT *
FROM table
WHERE auth_user.lastactivity > CURRENT_TIMESTAMP - INTERVAL '100 days'
118
Mark Byers

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
30
Scott Bailey

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.

4
Evan Carroll

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

4
Rohit Sonawane