在SQL中使用有条件的UPDATE语句

73

我想要一个像这样的UPDATE语句:

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

在 SQL Server / MySQL 中是否不可能实现此功能?我不想使用存储过程或其他东西。

请给我提供一个合适的解决方法。

2个回答

145

我认为你想要的是:

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

谢谢,它运行良好。我也在 MS SQL Server 和 MySQL Server 上使用它。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';。感谢您的回复。 - Saravanan
3
如果想要在不满足条件时保留值,则将该值设置为字段名称。例如,在上面的代码中,ELSE 20 END 将变成 ELSE age END - sonyisda1

34

您可以在更新语句中使用如下的case语句...

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

1
哈,我们一定是同时打出答案的 -- 我提交时没有看到其他人:-D - EBarr
我喜欢你的代码和原始代码唯一的不同之处是更新而不是选择,并且你添加了一个else子句。 - DForck42
将分配任务从WHERE子句中移出,改为使用CASE语句! - EBarr
3
@EBarr - 你在提交答案时没有看到其他答案的原因是因为你是第一个提交答案的人。 - TTT

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接