2012-03-12 8 views
17

Zdaję sobie sprawę, że byłoby znacznie łatwiej, gdybym mógł zmodyfikować tabelę po jej utworzeniu, ale zakładając, że nie mogę, mam tabelę, która jest taka:pasujący ciąg mysql z początkiem łańcucha w tabeli

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

Wartości w tabeli nie mają ustalonej długości. Mam ciąg do dopasowania, taki jak abffagpokejfkjs. Gdyby było odwrotnie, mogę zrobić

SELECT * from table where value like 'abff%' 

ale muszę wybrać wartość odpowiadającą początek napisu, który jest przewidziany.

Czy jest to szybki sposób, czy też potrzebna jest iteracja przez stół, aby znaleźć dopasowanie?

+0

Nie rozumiem problemu. Jaką wartość chcesz zwrócić? Dlaczego nie możesz po prostu użyć 'LEWEJ (wartość, 4)' lub 'LIKE'? –

+0

Nie mogę użyć LEWEGO, ponieważ nie wiem, ile znaków jest wynikiem - może być 1, może być 25. Może przechodzić przez wszystkie liczby, ale nie brzmi szybko. – Woody

Odpowiedz

34

Spróbuj tego:

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

Należy pamiętać, że to nie będzie efektywnie używać indeksu tak będzie powolny, jeśli masz dużo rekordów.

Należy również zauważyć, że niektóre znaki w value (np. %) mogą być interpretowane przez LIKE jako mające specjalne znaczenie, co może być niepożądane.

Powiązane problemy