You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无需使用CASE语句,用单条UPDATE语句互换Registration表Gender字段值

不用CASE语句实现Gender字段值互换的方案

嘿,刚好碰到过类似的需求!要把Registration表里Gender字段的M和F互换,还不能用CASE语句,这里有两个好用的办法:

方法一:嵌套REPLACE+临时占位符

核心思路是先把其中一个值换成临时标记,防止替换时互相覆盖,再完成互换:

-- 分两步执行,可读性更好
UPDATE Registration
SET Gender = REPLACE(Gender, 'M', '_TEMP_')
WHERE Gender = 'M';

UPDATE Registration
SET Gender = REPLACE(Gender, 'F', 'M')
WHERE Gender = 'F';

UPDATE Registration
SET Gender = REPLACE(Gender, '_TEMP_', 'F')
WHERE Gender = '_TEMP_';

或者把三个REPLACE嵌套成一行,一步到位:

UPDATE Registration
SET Gender = REPLACE(REPLACE(REPLACE(Gender, 'M', '_TEMP_'), 'F', 'M'), '_TEMP_', 'F')
WHERE Gender IN ('M', 'F');

方法二:利用ASCII码计算(更简洁)

观察一下ASCII码值:'M'的ASCII是77,'F'是70,两者相加刚好是147。所以我们可以通过计算得到另一个字符的ASCII码,再转成字符:

UPDATE Registration
SET Gender = CHAR(147 - ASCII(Gender))
WHERE Gender IN ('M', 'F');

这个方法不需要临时值,代码更短,而且主流数据库(比如MySQL、SQL Server、PostgreSQL)都支持ASCII()和CHAR()函数,兼容性不错。

小提示

  • 一定要加上WHERE Gender IN ('M', 'F'),避免误改Gender为空或者其他异常值的记录,更安全。
  • 执行UPDATE前,建议先用SELECT验证结果:
    SELECT Id, Name, Gender, CHAR(147 - ASCII(Gender)) AS 转换后Gender
    FROM Registration
    WHERE Gender IN ('M', 'F');
    

内容的提问来源于stack exchange,提问作者Rakesh Kr Pandey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:49:54