web-dev-qa-db-fra.com

Postgresql - sélectionnez quelque chose où date = "01/01/11"

J'ai un champ datetime dans mon Postgresql, nommé "dt". J'aimerais faire quelque chose comme

SELECT * FROM myTable WHERE extract (date from dt) = '01/01/11'

Quelle est la bonne syntaxe pour faire cela?

Merci!

35
Abramodj

Je pense que vous voulez convertir votre dt en date et corriger le format de votre date littérale :

SELECT *
FROM table
WHERE dt::date = '2011-01-01' -- This should be ISO-8601 format, YYYY-MM-DD

Ou le version standard :

SELECT *
FROM table
WHERE CAST(dt AS DATE) = '2011-01-01' -- This should be ISO-8601 format, YYYY-MM-DD

La fonction extract ne comprend pas "date" et renvoie un nombre.

73
mu is too short

Avec PostgreSQL, plusieurs fonctions de date/heure sont disponibles, voir ici .

Dans votre exemple, vous pouvez utiliser:

SELECT * FROM myTable WHERE date_trunc('day', dt) = 'YYYY-MM-DD';

Si vous exécutez régulièrement cette requête, il est possible de créer un index à l'aide du date_trunc fonctionne également:

CREATE INDEX date_trunc_dt_idx ON myTable ( date_trunc('day', dt) );

Un avantage de ceci est qu'il y a plus de flexibilité avec les fuseaux horaires si nécessaire, par exemple:

CREATE INDEX date_trunc_dt_idx ON myTable ( date_trunc('day', dt at time zone 'Australia/Sydney') );
SELECT * FROM myTable WHERE date_trunc('day', dt at time zone 'Australia/Sydney') = 'YYYY-MM-DD';
4
Hugh