2013-02-16 6 views
16

で始まります。フィールドタイトルの簡単なテーブルゲームをお持ちください。タイトルに基づいて検索したいAge of Empires III: Dynastiesというゲームがあり、とパラメータAge of Empires III: Dynastiesを使用すると、すべて正常に動作し、その名前のレコードが返されます。私はAge of Empires IIIで検索した場合しかし、それはすべてのレコードを返さない:これは、何も返さないSQLのような検索文字列は

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

LIKEの代わりに他の何かを使うべきですか?

私はMySQLを使用しています。

答えて

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

上記のクエリは、任意の行を返しませんどの列にも存在しない「帝国の時代III」の正確な文字列を探しています。

ので'age of empires'列としてあなたが好きで、この

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

を試してみる必要があるmysql string comparision

'%your string goes here%'

より使用する必要がある別の文字列で、この文字列と一致させるために'%age of empires III%'これは、行に一致する部分文字列を検索し、結果に表示されます。

+4

'LIKE'の右側にある文字列には大文字が含まれていますが、これは小文字に変換される文字列に一致しますか? –

+0

これは、列/データベースの照合によって異なります。それを安全にプレイするには、 SELECT *をゲームのどこからでも使うことができます(下位(タイトル)LIKE下( '%年齢の帝国III%')); –

2

COLLATE UTF8_GENERAL_CIは、無視ケースとして機能します。 使用:

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

または

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

あなたはワイルドカードにを使用する必要があります:あなたは「ので

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

最初はマッチを検索するだけなので、これはもっと速いようです。 – ChrisB