60 votes

Utilisation d'une instruction UPDATE conditionnelle en SQL

J'aimerais avoir un UPDATE une déclaration comme celle-ci :

 SELECT *
 FROM Employee
 WHERE age = CASE 
 WHEN (age < 20) THEN age=15
 WHEN (age > 20) THEN age= 20

Cela n'est-il pas possible dans SQL Server / MySQL ? Je ne veux pas utiliser la fonction procédures stockées ou d'autres choses.

Suggérez-moi un moyen approprié de contourner ce problème.

114voto

JNK Points 32743

Je pense que ce que vous voulez est :

UPDATE EMPLOYEE
SET age =
CASE WHEN AGE < 20 THEN 15
ELSE 20 END

0 votes

Merci. Il fonctionne bien. Je travaille avec lui sur MS SQL Server et MySQL Server aussi. UPDATE testingtable SET dob = CASE WHEN DATEDIFF(CURRENT_TIMESTAMP,ADDDATE(dob, INTERVAL -2 day)) > 1 THEN ADDDATE(dob,INTERVAL -2 DAY) ELSE CURRENT_TIMESTAMP END WHERE username='bob'; . Merci pour votre réponse.

2 votes

Si vous souhaitez laisser une valeur si elle ne remplit pas la condition, définissez la valeur du nom du champ. Par exemple, ci-dessus, le champ ELSE 20 END serait ELSE age END

30voto

EBarr Points 5824

Vous pouvez utiliser une instruction de cas dans une mise à jour comme suit...

UPDATE Employee 
SET Age = CASE WHEN (age < 20) THEN 15
              ELSE 20 END

1 votes

Ha, nous avons dû nous croiser en tapant des réponses - je n'en ai pas vu d'autres quand j'ai soumis :-D

0 votes

J'aime bien que la seule différence entre le code d'Op et le vôtre soit la mise à jour au lieu de la sélection et que vous ayez ajouté une clause else.

0 votes

Et a fait de l'affectation un CASE au lieu de l'avoir dans le où !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X