Vous n'êtes pas identifié(e).
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.
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
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
Merci beaucoup!! Ça marche super bien. Je vais prendre la bonne méthode. Mieux vaut prévenir que guérir.
Audrey
Hors ligne
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
À 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
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
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
Quelqu"un à une isée SVP?
Hors ligne
Bonjour,
Probablement des espaces en fin de chaîne, ou des caractères non visibles.
Julien.
https://rjuju.github.io/
En ligne
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