Este foro ya no está activo, así que no puedes publicar nuevas preguntas ni responder a las preguntas existentes.

Actualización condicional del contenido de una base de datos

18 de noviembre de 2014

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

#1

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

18 noviembre 2014, 20:30
#2

Con esta misma setencia puedo detectar cadenas de caracteres diferentes de números y borrarlas...?

@cristian_angulo

18 noviembre 2014, 23:24
#3

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

19 noviembre 2014, 8:30
#4

Gracias Javier. La segunda respuesta me sirvió como era. Quedo agradecido!

@cristian_angulo

20 noviembre 2014, 19:55