Toon posts:

[SQL] PostgreSQL LIKE werkt niet

Pagina: 1
Acties:

Onderwerpen


Verwijderd

Topicstarter
Beste Forummers,

Ik stuit op een heel raar PostgreSQL probleem waar ik helaas niet aan uit kom.

Er is een tabel 'gebruiker', met de kolommen 'id' (integer) en 'nickname' (tekst). Vervolgens heb ik er testdata in gezet:

1 | test_henk
2 | test_kees
3 | test_dirk
4 | test_henk
5 | test_dirk
6 | test_dirk
7 | test_firefox
8 | test_dick
9 | test_dirk
10 | test_dirk

Dan vervolgens voer ik de volgende query uit (d.m.v. een phpscript of pgadmin, maakt verder geen verschil):

SELECT * FROM gebruiker WHERE nickname LIKE '%henk%'

Resultaat: 0 rijen, terwijl er toch echt meerder keren de nickname test_henk voorkomt. Iemand enige idee hoe dit komt? _/-\o_

Edit: nog opmerkelijker is dat ik met LIKE '%test%' wel (alle) records te zien krijg.

[ Voor 5% gewijzigd door Verwijderd op 22-11-2007 11:35 ]


  • Niemand_Anders
  • Registratie: Juli 2006
  • Laatst online: 09-07-2024

Niemand_Anders

Dat was ik niet..

Bij PostgreSQL 5 Op FreeBSD (heel erg lang geleden) werkte een like alleen als op het veld ook een index was aangelegd. Destijds werd via de mailinglist als verklaring aangegeven dat postgres de like uitvoert op de index en niet op de tabel zelf. Sinds 2000 heb ik niet meer gewerkt met PostgreSql, dus ik weet niet of dit punt inmiddels is opgelost.

If it isn't broken, fix it until it is..


Verwijderd

Topicstarter
Het lijkt me dat dat probleem inmiddels is opgelost :-). Ik denk dat ik de fout al heb: de LIKE in PostgreSQL is hoofdletter gevoelig (in tegen stelling tot mySQL).

De query moet daarom als volgt worden:
SELECT * FROM gebruiker WHERE LOWER(nickname) LIKE '%henk%'

  • mace
  • Registratie: Juni 2003
  • Laatst online: 20-09 15:25

mace

Sapere Aude

Verwijderd schreef op donderdag 22 november 2007 @ 11:44:
Het lijkt me dat dat probleem inmiddels is opgelost :-). Ik denk dat ik de fout al heb: de LIKE in PostgreSQL is hoofdletter gevoelig (in tegen stelling tot mySQL).

De query moet daarom als volgt worden:
SELECT * FROM gebruiker WHERE LOWER(nickname) LIKE '%henk%'
Doet me denken aan een medestudent die ik ff moest coachen met SQL.

Hij had ook een gelijksoortig probleem, en dat had hij opgelost door het volgende te doen:
(met OR enz dr tussen maar ik ben te lui)
%henk% %Henk% %hEnk% %HEnk% etc...... 8)7

Verwijderd

Topicstarter
Haha, niet de meest effectieve oplossing :p

  • Kettrick
  • Registratie: Augustus 2000
  • Laatst online: 13:22

Kettrick

Rantmeister!

Hiervoor bestaat de ILIKE, zie voor meer info :

http://www.postgresql.org...c/functions-matching.html

:)
Pagina: 1