Hola a todos. Tengo este problema.
Debo, por necesidad de una aplicación, cambiar el tipo de dato dentro de una columna en MySQL. La cuestión es que algunas son de tipo varchar
y necesito convertirlas a int
. La semana pasada lo lograba hacer al ejecutar:
ALTER TABLE [nombre_tabla] CHANGE [columna] [nuevo_nombre] INT([valor])
Los valores de tipo varchar
los convertía en 0
. Ahora, y según creo ya que actualicé MySQL, la consulta no se realiza con éxito porque dentro de la columna de tipo varchar
existen valores que no dejan convertir la columna a int
.
¿Existe alguna manera de actualizar los datos de una columna a 0
con UPDATE
si son distintos de 0
y/o 1
?. Para que, actualizando estos valores ya pueda ejecutar mi script y se pueda actualizar el tipo int
.
Quedo atento. De antemano agradezco su tiempo.
Respuestas
MySQL sí que permite realizar actualizaciones condicionales con la siguiente sintaxis de la sentencia UPDATE):
UPDATE nombre_tabla SET columna = CASE columna WHEN 0 THEN columna WHEN 1 THEN columna ELSE 0 END
@javiereguiluz
Con esta misma setencia puedo detectar cadenas de caracteres diferentes de números y borrarlas...?
@cristian_angulo
Según esta pregunta de StackOverflow, puedes usar el siguiente truco para poner a 0
cualquier cikuna cuyo valor no sea numérico:
UPDATE nombre_tabla SET columna = 0 WHERE concat('',columna * 1) <> columna
Y según esta otra respuesta también puedes usar la función REGEXP
de MySQL para utilizar expresiones regulares que detecten si el valor es numérico o no:
UPDATE nombre_tabla SET columna = 0 WHERE columna NOT REGEXP '^[[:digit:]]+$'
@javiereguiluz
Gracias Javier. La segunda respuesta me sirvió como era. Quedo agradecido!
@cristian_angulo