2013-02-16 11 views
16

Nauka języka SQL. Miej proste gry stołowe z tytułem pola. Chcę wyszukiwać na podstawie tytułu. Jeśli mam grę o nazwie Age of Empires III: Dynasties i używam LIKE z parametrem Age of Empires III: Dynasties, wszystko działa poprawnie, wyszukiwanie zwraca rekord o tej nazwie. Ale jeśli ja z Age of Empires III szukać, to nie zwraca żadnych rekordów:Łańcuch wyszukiwania w języku SQL zaczyna się od

SELECT * from games WHERE (lower(title) LIKE 'age of empires III'); 

To nic nie wróci. Czy powinienem używać czegoś innego zamiast LIKE?

Używam MySQL.

Odpowiedz

24
SELECT * from games WHERE (lower(title) LIKE 'age of empires III'); 

Powyższe zapytanie nie zwraca żadnych wierszy, ponieważ was” ponowne szukanie dokładnego łańcucha 'age of empires III', który nie istnieje w żadnym wierszu.

Tak więc w celu dopasowania z tym ciągiem z innego łańcucha, który ma 'age of empires' jako podciąg trzeba użyć '%your string goes here%'

Więcej na mysql string comparision

Musisz spróbować tego

SELECT * from games WHERE (lower(title) LIKE '%age of empires III%'); 

w podobny '%age of empires III%' to spowoduje wyszukanie dowolnego pasującego podciągu w twoich wierszach, co będzie widoczne w wynikach.

+4

ciąg po prawej stronie 'LIKE' zawiera wielkie litery, czy dopasuje ciąg znaków do małej litery? –

+0

To zależy od sortowania kolumny/bazy danych. Aby zagrać w nią bezpiecznie, możesz użyć opcji WYBIERZ * z gier WHERE (niższy (tytuł) LIKE niższy ("% wieku imperiów III%")); –

2

COLLATE UTF8_GENERAL_CI będzie działać jako ignorowanie. USE:

SELECT * from games WHERE title COLLATE UTF8_GENERAL_CI LIKE 'age of empires III%'; 

lub

SELECT * from games WHERE LOWER(title) LIKE 'age of empires III%'; 
16

Trzeba użyć symbolu wieloznacznego %:

SELECT * from games WHERE (lower(title) LIKE 'age of empires III%'); 
+0

Wygląda na to, że będzie to szybsze, ponieważ szuka tylko dopasowań od początku. – ChrisB

Powiązane problemy