Es habitual tener un campo con direcciones en tablas de una BD. La dirección puede contener la calle, la ciudad… Esta lección te muestra cómo obtener solo la ciudad a partir de la dirección completa.
Nota: esta lección asume que se emplea MySQL. Aunque con otros gestores de BD las funciones son ligeramente diferentes, la explicación sería similar.
Supongamos que en una tabla de una BD tenemos un campo llamado direccion que almacena direcciones con el siguiente formato (calle número, ciudad):
Calle Ramón y Cajal 13, Alfaro Avenida San Martín 3, Logroño Arenal 7, Madrid
La ciudad está separada de la calle por una coma y un espacio.
Supongamos que tenemos que obtener la ciudad de una determinada dirección. Para ello (en MySQL) podemos usar la siguiente expresión:
substring(direccion, instr(direccion,',')+2)
¿De dónde sale esto? ¿Cómo funciona? Primero recordemos lo que hace cada función por separado:
- instr(<cad>, <subcad>) devuelve el índice de comienzo de una subcadena en una cadena. P.ej., instr('Hola', 'la') devuelve 3, porque la 'la' comienza en el índice 3 de la cadena 'Hola'. Por cierto, instr viene de in-string (dentro de la cadena)
- substring(<cadena>, <inicio>, <N>) devuelve un trozo de la <cadena> que comienza en el índice <inicio> y tiene <N> caracteres. Si no se indica este tercer argumento, se devuelve un trozo de la cadena que comienza en el índice <inicio> y llega hasta el final. P.ej., substring('Hola', 2) devuelve 'ola'.
- instr(direccion,',') sirve para buscar la posición de la ',', que es el caracter que aproximadamente marca el inicio de la ciudad dentro de la dirección. En este caso devolverá 9, porque la ',' está en la posición 9 de la cadena 'Arenal 7, Madrid'.
- En nuestro formato de fechas, la ciudad comienza dos posiciones más allá de la ','. Por eso añadimos el “+2”. Así, substring(direccion, instr(direccion,',')+2) = substring(direccion, 9+2) = substring(direccion, 11)
- La posición 11 de la cadena 'Arenal 7, Madrid' es la que ocupa la 'M' de 'Madrid'.
- Por ello substring(direccion, 11) devuelve desde la 'M' hasta el final. Es decir, devuelve 'Madrid'.
Saber sacar la ciudad de una dirección con funciones no significa que haya que hacerlo siempre
select *
from Persona
where substring(direccion, instr(direccion,',')+2) = 'Alfaro';
Basta con un comodín % y un like
select *
from Persona
where direccion like '%, Alfaro';
No hay comentarios:
Publicar un comentario