1
votes

Pourquoi la condition de cas MySQL ne fonctionne pas correctement

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.


2 commentaires

Qu'est-ce que @a ???


Il existe deux formes d’expression CASE: simple et recherchée .


3 Réponses :


1
votes

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;


0 commentaires

3
votes

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;


0 commentaires

1
votes
set @string:='11';

select CASE WHEN CAST(@string AS SIGNED) = 11 THEN 'yes'
            ELSE 'no'
       END as filed;
Demo

0 commentaires