Usted encuentra que un error en un sistema ha sido nombrar incorrectamente hombres (M) como mujeres (W) y viceversa en la base de datos. Las columnas solo permiten un carácter. Sin usar ninguna tabla temporal, escriba una consulta de actualización para resolver esto.
Esta pregunta se hizo en una entrevista reciente que tuve, y voy a entrar en más entrevistas que pueden tener preguntas similares, así que quería tener una idea de cómo manejar esto.
Respuestas:
Desea usar una
CASE
expresión de algún tipo.En SQL Server, el código se vería así:
Editar: como se indica en los comentarios (y algunas de las otras respuestas), ELSE no es necesario si coloca una cláusula WHERE en la declaración.
Esto evita actualizaciones innecesarias. Lo importante en cualquier caso es recordar que hay otras opciones además de M & W (NULL, por ejemplo) y que no desea ingresar información errónea. Por ejemplo:
Esto reemplazaría cualquier NULL (u otros géneros posibles) como 'M' que sería incorrecto.
Un par de otras opciones serían
Y un mas conciso
fuente
IIF()
conIF()
y funcionaría en MySQL;)En Oracle, podría usar un CASO ya que las otras respuestas tienen:
También puedes usar un DECODE:
fuente
Para cambiar entre solo dos valores, también puede probar este truco, que no usa una
CASE
expresión (suponiendo que Transact-SQL aquí):Dependiendo del valor actual de
Gender
,ASCII(Gender)
se cancelará unoASCII('M')
u otroASCII('W')
, dejando que el otro código sea transformado por laCHAR()
función nuevamente al carácter correspondiente.Sin embargo, lo dejo solo para comparar. Si bien esta opción puede tener un pretexto de elegancia,
CASE
podría decirse que una solución que usa una expresión sería más legible y, por lo tanto, más fácil de mantener, y definitivamente sería más fácil expandirse a más de dos valores.fuente
M
y seanW
ingresados en mayúsculas para evitar que7
aparezcan inesperados o '-` en los resultados.ASCII(Gender)
conASCII(UPPER(Gender))
, que es menos elegante, aunque no mucho.WHERE
cláusula?Puedes hacerlo con una
case ... when
expresión:fuente
Usaría una actualización con una
case
expresión.fuente
Puede realizar esta actualización usando una
case
expresión.Sugeriría ejecutar su declaración de actualización dentro de una transacción y agregar una consulta simple como:
para verificar los resultados que obtendrás. Realice la transacción con una reversión y cambie a una confirmación cuando sus resultados se alineen con lo que espera.
fuente