Você descobre que um erro em um sistema está nomeando 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 tive, e estou entrando em mais entrevistas que podem ter perguntas semelhantes, então queria ter uma ideia de como lidar com isso.
Você deseja usar uma
CASE
expressão de algum tipo.No SQL Server o código ficaria assim:
Edit: Conforme indicado nos comentários (e algumas das outras respostas), o ELSE não é necessário se você colocar uma cláusula WHERE na instruçã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 quer colocar informações equivocadas. Por exemplo:
Isso substituiria quaisquer NULLs (ou outros gêneros possíveis) como 'M', o que seria incorreto.
Algumas outras opções seriam
E mais conciso
No Oracle, você pode usar um CASE como as outras respostas:
Você também pode usar um DECODE:
Para alternar entre apenas dois valores, você também pode tentar este truque, que não usa uma
CASE
expressão (assumindo 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 pretensão de elegância, uma solução usando uma
CASE
expressão seria mais legível e, portanto, mais fácil de manter, e definitivamente seria mais fácil expandir para mais de dois valores.Você pode fazer isso com uma
case ... when
expressão:Eu usaria uma atualização com uma
case
expressão.Você pode executar essa atualização usando uma
case
expressão.Sugiro executar sua instrução de atualização em uma transação e adicionar uma consulta simples, como:
para verificar os resultados que você obterá. Executando a transação com um rollback e mudando para um commit quando seus resultados estiverem alinhados com o que você espera.