2010-10-15 4 views
1

J'ai une table qui contient une liste des lettres de départ dans un code postal, par ex. LS pour Leeds et SO pour Southampton.Chaîne longue assortie (code postal complet) et chaîne courte (début du code postal) dans mysql

Je souhaite faire correspondre ces éléments avec un code postal complet entré par l'utilisateur, par ex. LS19 1AB. J'ai cherché à utiliser LIKE et quelques expressions rationnelles dans ma requête, mais j'ai du mal à trouver un moyen de le faire dans le bon sens.

Des idées?

+0

Montrez-nous ce que vous avez essayé jusqu'à présent et décrire de quelle façon il ne fait pas ce que vous voulez. –

+0

pourquoi ne pas seulement utiliser le premier à caractères de l'entrée de l'utilisateur pour la correspondance? sont toutes les lettres de départ de longueur 2? en pur SQL: 'où post_code = SUBSTRING ('LS19 1AB', 0,2)' – sfussenegger

+0

yeh malheureusement certaines zones telles que liverpool commencent avec une lettre l - mais il suit alors avec un nombre si je pouvais extraire tous les numéros ce serait travail –

Répondre

1

Vous pouvez tourner la clause where autour, et faire quelques trucs de manipulation de chaînes:

create table post_codes(
    post_code varchar(32) 
); 


mysql> insert into post_codes values("AS"); 
Query OK, 1 row affected (0.00 sec) 

mysql> insert into post_codes values("LS"); 
Query OK, 1 row affected (0.00 sec) 

mysql> select post_code from post_codes where 'LS19 1AB' like CONCAT(post_code,'%'); 
+-----------+ 
| post_code | 
+-----------+ 
| LS  | 
+-----------+ 
1 row in set (0.00 sec) 
+0

ahh - merveilleux, mais si j'ai une autre ligne avec la valeur «L», il retournera aussi, de toute façon à faire correspondre la première lettre ou deux lettres avant les chiffres –

+0

Semble un peu plus difficile, si vous voulez le plus long match, et seulement un match, vous pouvez ajouter un 'order by post_code desc limite 1;' si, d'autre part, si vous savez à l'avance de ne faire correspondre que 1 ou 2 caractères, vous feriez juste 'SUBSTRING ('LS19 1AB', 1,2) = code_texte; 'en cas de correspondance de 2 lettres. – nos

Questions connexes