Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Duvida com UPDATE

Olá, estou assistindo a aula onde a instrutora ensina usar o comando LENGTH para contar as quantidade de caracter do CPF na tabela colaboradores, como não tinha nenhum com o CPF menor ou maior que 11 resolvi fazer um teste alterando alguns registros. Para isso usei o seguinte comando: UPDATE Colaboradores set CPF = '123' where id < '5' -----///------ Estava com a intenção de alterar os 5 primeiros registros dos colaboradores com ID menor que 5, porém, o comando alterou 95 registros da tabela... Alguém consegue me explicar o que eu errei? Insira aqui a descrição dessa imagem para ajudar na acessibilidade

3 respostas

Oi Rodrigo,

O problema está na comparação que você fez na cláusula WHERE. Ao usar id < '5', o SQLite está comparando o valor da coluna id (que é numérica) com a string '5'. Em comparações desse tipo, o SQLite converte ambos os lados para o tipo de dado mais "genérico", que nesse caso é texto. Assim, a comparação é feita como se fosse uma string, e não um número.

Na comparação de strings, o SQLite compara caractere por caractere, da esquerda para a direita. Por isso, '1' é menor que '5', '2' é menor que '5', e assim por diante, até '9'. Isso explica porque tantos registros foram alterados, pois todos os IDs que começam com um dígito menor que '5' foram considerados menores que '5'.

Para corrigir, você deve comparar com o número 5, sem as aspas: WHERE id < 5. Assim, a comparação será numérica e apenas os 4 primeiros registros serão alterados.

Exemplo:

UPDATE Colaboradores SET CPF = '123' WHERE id < 5;

A persistência leva à perfeição! 👍 💻

tux matrix Caso este post o tenha ajudado, marque-o como solucionado ☑️. Bons Estudos! 🤓

Obrigado pela ajuda novamente Luis, porém, mesmo usando sem as aspas igual me orientou o problema continua acontecendo, veja: Insira aqui a descrição dessa imagem para ajudar na acessibilidade

solução!

Oi Rodrigo,

Agora que vi, que o seu ID também está com texto.

O SQLite converte ambos os lados para o tipo de dado mais "genérico", que nesse caso é texto. Assim, a comparação é feita como se fosse uma string, e não um número.

Comando corrigido:

UPDATE Colaboradores 
SET CPF = '123' 
WHERE CAST(id AS INTEGER) < 5;