我有以下查询,我用它来更新性别列,如果它设置为男性,然后更新为M,为女性,更新为F
该声明第一次正常运行。
UPDATE [People].[People]
SET GENDER = CASE WHEN GENDER = 'Male' THEN 'M'
WHEN GENDER = 'Female' THEN 'F' END WHERE Id=40
我的问题是,如果性别已经是'M',那么当再次运行该语句时,'M'设置为NULL
我可以在下面做,但似乎有点软糖
UPDATE [People].[People]
SET GENDER = CASE WHEN GENDER = 'Male' THEN 'M'
WHEN GENDER = 'Female' THEN 'F'
WHEN GENDER = 'M' THEN 'M'
WHEN GENDER = 'F' THEN 'F'
END WHERE Id=40
有人可以提供建议吗?
感谢
答案 0 :(得分:5)
向WHERE子句添加另一个条件:
UPDATE [People].[People]
SET GENDER = CASE WHEN GENDER = 'Male' THEN 'M'
WHEN GENDER = 'Female' THEN 'F' END
WHERE Id=40
AND NOT GENDER IN ('M', 'F')
这将避免再次更新行。
答案 1 :(得分:4)
默认为现有值;
SET GENDER = CASE
WHEN GENDER = 'Male' THEN 'M'
WHEN GENDER = 'Female' THEN 'F'
ELSE GENDER
END WHERE Id=40
甚至
SET GENDER = LEFT(GENDER, 1)
答案 2 :(得分:0)
您可以使用IN
UPDATE [People].[People]
SET GENDER = CASE WHEN GENDER in ('Male','M') THEN 'M'
WHEN GENDER in ('Female','F') THEN 'F' END WHERE Id=40
答案 3 :(得分:0)
如果您只想在列'Male'
或'Female'
时更新列,请将其作为语句的附加标准。而且由于您似乎只想留下第一个字符,您可以使用LEFT()或SUBSTRING()来提取它而不是CASE表达式。
所以,你走了:
UPDATE [People].[People]
SET GENDER = LEFT(GENDER, 1)
WHERE Id = 40
AND GENDER IN ('Male', 'Female')
;