2012-03-12 17 views
17

テーブルが作成されたときにテーブルを変更できれば大丈夫だとわかりましたが、できないと仮定すると、テーブルがあります。テーブルの文字列の先頭にmysqlが一致する文字列

abcd 
abde 
abdf 
abff 
bbsdf 
bcggs 
... snip large amount 
zza 

表の値は固定長ではありません。 私はabffagpokejfkjsなどの一致する文字列を持っています。 それは他の方法でのラウンドだった場合、私は

SELECT * from table where value like 'abff%' 

行うことができますが、私は提供された文字列の先頭に一致する値を選択する必要があります。

これを行う簡単な方法はありますか、それとも一致を見つけるためにテーブルを通して繰り返しが必要ですか?あなたは、レコードをたくさん持っている場合、それは遅くなりますので、これは効果的にインデックスを使用しないこと

SELECT col1, col2 -- etc... 
FROM your_table 
WHERE 'abffagpokejfkjs' LIKE CONCAT(value, '%') 

注:

+0

私はこの問題を理解していません。どのような価値を返そうとしていますか?なぜあなたは 'LEFT(値、4)'か 'LIKE'だけを使うことができませんか? –

+0

私はLEFTを使用することはできません。結果の文字数がわからないからです.1の場合は25、25の場合もあります。すべての数字をループすることはできますが、速くは発音できません。 – Woody

答えて

34

はこれを試してみてください。

value(たとえば%)の一部の文字は、LIKEによって特別な意味があると解釈される可能性がありますが、これは望ましくない可能性があります。

関連する問題