2009-10-09 9 views
2

En Postgresql 8 pourquoi est-ce ok"LIKE" ne fonctionne pas comme prévu

select * from prod where code like '1%' 
select * from prod where code like '%1' 

mais renvoie 0 lignes (il y a des codes début/fin avec le chiffre 1)

select * from prod where code like '1%1' 

Mise à jour

qui se passe dans mon instalation actuel:

# psql --version 
psql (PostgreSQL) 8.3.7 


create table a(code char(10)); 
CREATE TABLE 
db=# insert into a values('111'); 
INSERT 0 1 
db=# select * from a where code like '1%'; 
    code 
------------ 
111 
(1 row) 

db=# select * from a where code like '%1'; 
code 
------ 
(0 rows) 

db=# select * from a where code like '1%1'; 
code 
------ 
(0 rows) 

Update 2

Il est le type de données! Avec varchar c'est Ok!

Merci.

+0

Vous voudrez peut-être modifier votre question - je ne l'ai pas comprise. Si postgres ne montre pas les données avec le code "111" (par exemple) avec vos requêtes, alors quelque chose est cassé, mais pour être honnête - je ne le crois pas vraiment. Montrez-nous les données, la requête, le résultat reçu et le résultat attendu. –

Répondre

7

est-ce parce que le type de données est char (10)?

Cela signifie qu'il sera toujours occuper 10 caractères même si vous insérez simplement quelque chose de plus court comme "111". n'utilisez pas une chaîne de 10 caractères avec "1" à la fin, "% 1" et "1% 1" ne correspondront jamais.

+0

bonne réponse avec explication mr.anonymousen –

1

(EDIT:. J'avais posté ce qui suit (avec avec un opérateur, plutôt que OU)

SELECT * FROM prod WHERE code LIKE '%1' OR code LIKE '1%'; 

Si vous voulez opérateur AND, la requête dans la question devrait fonctionner OK Toutefois, si vous. veulent utiliser ou opérateur, alors ma question ci-dessus est probablement l'une des meilleures façons de le faire.

Questions connexes