J'ai le code suivant
set @string:='11';
select CASE @string
WHEN CAST(@a AS SIGNED)=11 THEN 'yes'
ELSE 'no'
END as filed;
Je ne comprends pas pourquoi il renvoie «non».
Et aussi si j'utilise WHEN @ string = '11' ALORS 'oui' il renvoie également non.
3 Réponses :
Parce que vous n'avez pas défini @a , la valeur est donc NULL .
Par conséquent, la clause ELSE va toujours être renvoyé.
Ensuite, votre deuxième problème est que cela ne fonctionne pas:
SELECT CASE WHEN CAST(@a AS SIGNED) = 11 THEN 'yes'
ELSE 'no'
END as filed;
SELECT CASE @a WHEN 11 THEN 'yes'
ELSE 'no'
END as filed;
C'est parce que CAST (@a AS SIGNED) = 11 est une expression booléenne dont la valeur est 0 , 1 ou NULL et qui n'est jamais 11 .
Celles-ci fonctionnent:
set @a = '11';
SELECT CASE @a
WHEN CAST(@a AS SIGNED) = 11 THEN 'yes'
ELSE 'no'
END as filed;
Est-ce ce que vous visiez?
set @string:='11'; select CASE CAST(@string AS SIGNED) when '11' THEN 'yes' ELSE 'no' END as filed;
Peut également être exprimé comme
set @string:='11'; select CASE WHEN CAST(@string AS SIGNED)='11' THEN 'yes' ELSE 'no' END as filed;
set @string:='11';
select CASE WHEN CAST(@string AS SIGNED) = 11 THEN 'yes'
ELSE 'no'
END as filed;
Demo
Qu'est-ce que
@a???Il existe deux formes d’expression CASE: simple et recherchée .