sábado, 29 de mayo de 2010

Split de un string con un delimitador en MySQL

Lo que en PHP podemos hacer fácilmente con la función split() se torna algo más complicado en MySQL.

Estoy migrando una tabla a un nuevo formato, y uno de los datos a migrar es un campo "medidas". Este campo es de tipo Varchar, y contiene strings del tipo "30x50" (es decir, ancho x altura).

Necesito disociar ese campo en dos campos numéricos: "ancho" y "altura"

Dado que no existe una función similar a split(), la improvisación me llevó a esta solucion, que comparto:

INSERT INTO
tabla_nueva ( ancho, alto )
SELECT
left(medidas,instr(medidas,'x')-1),
right(medidas,length(medidas)-instr(medidas,'x'))
FROM tabla_vieja;


instr(medidas,'x') -> devuelve la posición numérica dentro del string 'medidas' donde se encuentra el delimitador 'x'.

left(medidas,instr(medidas,'x')-1) -> devuelve la parte izquierda del string 'medidas' excluyendo la 'x' (sólo devuelve la cifra correspondiente al ancho)

length(medidas)-instr(medidas,'x') -> calcula la cantidad de dígitos que están a la derecha de la 'x' (la cantidad de dígitos del alto)

right(medidas,length(medidas)-instr(medidas,'x')) -> toma lo que está a la derecha de la 'x' (el alto)

Compartir en FaceBook

UpTweet