2011-01-20 9 views
5

Czy ktoś wie, jak wykonać rozróżnianie wielkości liter/zapytań z Postgres 7.4?Sprawa Niewrażliwe wyszukiwania/zapytania

Myślałem o RegEx, ale nie jestem pewien, jak to zrobić, a może istnieje funkcja/flaga lub coś, co mogę dodać zapytanie?

Używam PHP do łączenia i wykonywania zapytań.

Dlatego szukam informacji adresowych.

Przykład:

123 main street 
123 Main st. 
123 Main Street 
123 main st 
123 Main st 
etc... 

wszelkie myśli?

SELECT address FROM tbl WHERE address LIKE '%123 %ain%' 

Odpowiedz

17

Zastosowanie ILIKE, np .:

... 
WHERE 
    address ILIKE '123 main st%' 

Documentation.


Alternatywnie można użyć UPPER lub LOWER, np:

... 
WHERE 
    LOWER(address) LIKE '123 main st%' 
+1

Nie zapomnij dodać indeksu na niższym (adres), aby przyspieszyć wyszukiwanie (chociaż indeks nie pomoże dla '% foo%', tylko dla 'foo%') –

2

Oprócz iLike i podejściem dolnym(), widzę dwie inne możliwości:

  1. Użyj przycisku citext typ danych: http://www.postgresql.org/docs/9.0/static/citext.html.
  2. Skorzystaj z wyszukiwania pełnotekstowego - które może być najbardziej elastycznym i najszybszym rozwiązaniem, chociaż nieco bardziej skomplikowanym, aby zacząć.
+0

Nie jestem pewien, że Citext jest kompatybilny z Postgresem 7.4, a FTS wygląda na to, że byłoby to świetne rozwiązanie, starania o poprawne działanie systemu mogą wykraczać poza potrzeby. Nigdy wcześniej nie używałam FTS, czy poleciłeś i artykuły na ten temat, które mogłyby być skierowane na adres uliczny? –

+0

Niestety nie widziałem, że używasz tak przestarzałej wersji. Powiedziałbym, że powinieneś najpierw uaktualnić, a następnie kontynuować. FTS zdecydowanie nie jest opcją dla 7.x. Naprawdę, naprawdę zaktualizuj do co najmniej 8.4 –

+0

, jeśli mógłbym, ale nie bardzo mój wybór :( –