Vous n'êtes pas identifié(e).

#1 12/05/2010 17:17:48

Dadou972
Membre

Problème opérateur LIKE sur le type DATE et TIMESTAMP

Bonjour,

Je ne parviens pas à exécuter la requête suivante :

 "SELECT * FROM manipulations WHERE date_saisie LIKE '%2010%'.

J'obtiens l'erreur suivante :

ERREUR:  l'opérateur n'existe pas : date ~~ unknown
LINE 1: SELECT * FROM manipulations WHERE date_saisie LIKE '%2010%'
                                                      ^
HINT:  Aucun opérateur ne correspond au nom donné et aux types d'arguments.
Vous devez ajouter des conversions explicites de type.

sad
Ma version de postgreSQL est la 8.3.8. Il s'agit de ma machine. Sur le serveur, la version est la 8.1.19 et il n'y a pas d'erreur quand j'effectue exactement la même requête.

Quelqu'un pourrait-il m'aider?:D

Merci beaucoup

Hors ligne

#2 12/05/2010 17:45:44

gleu
Administrateur

Re : Problème opérateur LIKE sur le type DATE et TIMESTAMP

En version 8.3, certaines conversions implicites ont été supprimées. Donc, en effet, utiliser LIKE sur autre chose que du texte a de forte chance de ne pas passer. Deux solutions :
* la mauvaise : WHERE date_saisie::text LIKE '%2010%'
* la bonne : WHERE to_char(date_saisie, 'YYYY') = '2010'


Guillaume.

Hors ligne

#3 12/05/2010 17:49:32

Dadou972
Membre

Re : Problème opérateur LIKE sur le type DATE et TIMESTAMP

Merci beaucoup!! Ça marche super bien. Je vais prendre la bonne méthode. Mieux vaut prévenir que guérir.

Audrey

Hors ligne

#4 12/05/2010 21:48:34

Marc Cousin
Membre

Re : Problème opérateur LIKE sur le type DATE et TIMESTAMP

Au passage, une remarque, qui me semble importante : WHERE to_char(date_saisie, 'YYYY') = '2010' ne pourra pas utiliser d'index s'il y en a un sur date saisie.

La forme VRAIMENT bonne, c'est where date_saisie >= '2010-01-01' and date_saisie < '2011-01-01'

C'est pour pinailler, mais si i y avait beaucoup d'enregistrements dans la table, celà pourrait faire une très grosse différence.


Marc.

Hors ligne

#5 12/05/2010 23:21:04

gleu
Administrateur

Re : Problème opérateur LIKE sur le type DATE et TIMESTAMP

À part que tu retombes dans le problème de conversion. Donc, il faudrait plutôt faire date_saisie::text >= '2010-01-01' and date_saisie::text < '2011-01-01'


Guillaume.

Hors ligne

#6 13/05/2010 10:58:04

Marc Cousin
Membre

Re : Problème opérateur LIKE sur le type DATE et TIMESTAMP

date_saisie est une date.
2010-01-01 est la date au format iso.

test=# CREATE TABLE test (date_saisie date);
CREATE TABLE
test=# SELECT * from test where date_saisie >= '2010-01-01' and date_saisie < '2011-01-01'
test-# ;
date_saisie
-------------
(0 rows)


Sinon, si on n'a pas une base avec un datestyle iso, sait on jamais, on peut écrire :

SELECT * from test where date_saisie >= to_date('2010-01-01','YYYY-MM-DD') and date_saisie < to_date('2011-01-01','YYYY-MM-DD');

Mais c'est cette forme qui est la bonne : on convertit la valeur à tester dans le type de la colonne, jamais l'inverse.

À moins que date_saisie ne soit pas une date, mais dans ce cas, ce n'est pas cohérent avec  :

ERREUR:  l'opérateur n'existe pas : date ~~ unknown


Marc.

Hors ligne

#7 03/06/2015 10:55:44

lemjid
Membre

Re : Problème opérateur LIKE sur le type DATE et TIMESTAMP

Bonjour,

Je reprend cette discussion car j'ai aussi un souci avec l'opérateur "LIKE".
Je suis en version 9.1.7 de postgresql sur redhat5. Je trouve dans la doc section 9.7.1 que l'operateud "LIKE" sans "%" se comporte comme "=" equal. alors qu'il ne me donne rien sur une recherche de chaie de 9 caractères alors que ça marche avec "%". Est ce que ceci a un rapport avec les indexes utilisés et/ou le type encodage????

Merci d'avance.

Hors ligne

#8 03/06/2015 11:45:37

lemjid
Membre

Re : Problème opérateur LIKE sur le type DATE et TIMESTAMP

Quelqu"un à une isée SVP?

Hors ligne

#9 03/06/2015 21:39:40

rjuju
Administrateur

Re : Problème opérateur LIKE sur le type DATE et TIMESTAMP

Bonjour,

Probablement des espaces en fin de chaîne, ou des caractères non visibles.

Hors ligne

#10 04/06/2015 09:37:51

lemjid
Membre

Re : Problème opérateur LIKE sur le type DATE et TIMESTAMP

Bonjour,

Merci beacoup Julien! En effet (ça ressemble un peut), j'ai constaté après que la colonne en question été déclaré en char(50) ce qui contient bien évidemment plus que mes caractères recherchés.
Merci encor pour ta réactivité

Hors ligne

Pied de page des forums