Você descobre que um erro em um sistema foi nomear incorretamente homens (M) como mulheres (W) e vice-versa no banco de dados. As colunas permitem apenas um caractere. Sem usar nenhuma tabela temporária, escreva uma consulta de atualização para resolver isso.
Essa pergunta foi feita em uma entrevista recente que eu tive, e eu vou para mais entrevistas que podem ter perguntas semelhantes, então eu queria ter uma idéia de como lidar com isso.
Respostas:
Você deseja usar uma
CASE
expressão de algum tipo.No SQL Server, o código ficaria assim:
Editar: Conforme declarado nos comentários (e em algumas das outras respostas), o ELSE não é necessário se você colocar uma cláusula WHERE na declaração.
Isso evita atualizações desnecessárias. O importante em ambos os casos é lembrar que existem outras opções além de M&W (NULL por exemplo) e você não deseja inserir informações equivocadas. Por exemplo:
Isso substituiria quaisquer NULLs (ou outros gêneros possíveis) como 'M' que estivessem incorretos.
Algumas outras opções seriam
E um mais conciso
fonte
IIF()
comIF()
e ele iria trabalhar em MySQL;)No Oracle, você pode usar um CASE, pois as outras respostas têm:
Você também pode usar um DECODE:
fonte
Para alternar entre apenas dois valores, você também pode tentar este truque, que não usa uma
CASE
expressão (assumindo o Transact-SQL aqui):Dependendo do valor atual de
Gender
,ASCII(Gender)
cancelaráASCII('M')
ouASCII('W')
, deixando o outro código a ser transformado pelaCHAR()
função de volta ao caractere correspondente.Estou deixando isso apenas para comparação, no entanto. Embora essa opção possa ter uma aparência de elegância,
CASE
sem dúvida uma solução usando uma expressão seria mais legível e, portanto, mais fácil de manter, e seria definitivamente mais fácil expandir para mais de dois valores.fonte
M
eW
tenham sido digitados em maiúsculas para evitar que inesperados7
ou `-` apareçam nos resultados.ASCII(Gender)
porASCII(UPPER(Gender))
, o que é menos elegante, embora não muito.WHERE
cláusula?Você pode fazer isso com uma
case ... when
expressão:fonte
Eu usaria uma atualização com uma
case
expressão.fonte
Você pode executar esta atualização usando uma
case
expressão.Sugiro que você execute sua instrução de atualização em uma transação e adicione uma consulta simples, como:
para verificar os resultados que você obterá. Executar a transação com uma reversão e alterná-la para uma confirmação quando seus resultados estiverem alinhados com o que você espera.
fonte