T-SQL IIF语句转MySQL:请验证我的转换是否正确
T-SQL转MySQL的IIF语句正确性验证
我们逐段分析你的转换是否正确,同时结合原T-SQL的逻辑给出修正建议:
1. MapType字段的转换
原T-SQL语句
IIf([tblmap].[mapelec],'Digital Maps', IIf([tblmap].[mappaper],'Paper Maps','Other Maps')) AS MapType
(注:原代码遗漏了第一个IIf的分隔逗号,补全后逻辑为:若mapelec为真则返回Digital Maps,否则判断mappaper,为真返回Paper Maps,否则返回Other Maps)
你的转换语句
CASE WHEN tblmap.mapelec = 'TRUE' THEN 'Digital Maps' WHEN tblmap.mappaper = 'TRUE' THEN 'Paper Maps' ELSE 'Other Maps' END AS MapType
正确性判断
转换正确。MySQL的CASE语句会按顺序匹配条件,第一个满足的分支就返回结果,逻辑完全和原嵌套IIf一致。如果你的mapelec/mappaper列是MySQL的布尔类型(BOOL或TINYINT(1)),可以简化为WHEN tblmap.mapelec(无需='TRUE');如果存储的是字符串类型的'TRUE'/'FALSE',当前写法没问题。
2. MapPlan字段的转换
原T-SQL语句
IIf(([tblMap]![MapPlan]=True),'Plan View','') AS MapPlan
逻辑:当MapPlan为True时返回Plan View,否则返回空字符串。
你的转换语句
CASE WHEN tblmap.mapelec = 'FALSE' THEN 'Plan View' END AS MapPlan
正确性判断
转换错误,存在两个问题:
- 错误地将判断字段从
MapPlan写成了mapelec - 缺少
ELSE ''分支,当条件不满足时会返回NULL而非空字符串
正确的转换应为:
CASE WHEN tblmap.MapPlan = 'TRUE' THEN 'Plan View' ELSE '' END AS MapPlan
3. 数值返回的IIf转换
原T-SQL语句
IIf([tblmap].[mapelec],1) IIf([tblmap].[mappaper],2,3)
逻辑:
- 第一个
IIf:mapelec为真时返回1,否则返回NULL(T-SQL中IIf省略第三个参数时默认返回NULL) - 第二个
IIf:mappaper为真时返回2,否则返回3
你的转换语句
CASE WHEN tblmap.mapelec = 'TRUE' THEN '1' END, CASE WHEN tblmap.mappaper = 'TRUE' THEN '2' ELSE '3' END
正确性判断
- 第一个转换逻辑正确,但如果要返回数字类型的1,建议去掉引号写成
THEN 1;如果是字符串类型则当前写法没问题。 - 第二个转换完全正确,逻辑和原
IIf完全匹配。
内容的提问来源于stack exchange,提问作者stanhook
相关产品推荐
相关产品推荐

