2012-03-12 10 views
17

Mi rendo conto che sarebbe molto più semplice se potessi modificare la tabella quando è stata creata, ma supponendo che non sia possibile, ho una tabella che è tale:mysql stringa di corrispondenza con inizio stringa nella tabella

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

I valori nella tabella non sono di lunghezza fissa. Ho una stringa da abbinare come abffagpokejfkjs. Se fosse il contrario, ho potuto fare

SELECT * from table where value like 'abff%' 

ma ho bisogno di selezionare il valore che corrisponde l'inizio di una stringa che viene fornito.

C'è un modo rapido per farlo oppure è necessaria una iterazione attraverso il tavolo per trovare una corrispondenza?

+0

Non capisco il problema. Che valore stai cercando di restituire? Perché non puoi semplicemente usare 'LEFT (value, 4)' o 'LIKE'? –

+0

Non posso usare SINISTRA perché non so quanti caratteri il risultato sia - potrebbe essere 1, potrebbe essere 25. Potrebbe scorrere tutti i numeri ma non suona veloce. – Woody

risposta

34

Prova questo:

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

Si noti che questo non utilizzare in modo efficace un indice così sarà lento se si dispone di un sacco di dischi.

Si noti inoltre che alcuni caratteri nello possono essere interpretati da LIKE come aventi un significato speciale, che potrebbe non essere desiderabile.

Problemi correlati