SQL不使用CASE、通过NULLIF实现多条件列值转NULL的方法
实现方案
你期望的NULLIF(C1, '' OR 'N/A')这类多值匹配写法SQL原生不支持,但可以通过嵌套NULLIF函数实现需求,不需要使用CASE语句。
通用查询代码
SELECT NULLIF(NULLIF(C1, ''), 'N/A') AS C1 FROM 你的表名;
执行逻辑说明
- 内层
NULLIF(C1, '')先处理空字符串:如果C1为空字符串则返回NULL,其他值原样返回 - 外层
NULLIF(内层处理结果, 'N/A')再处理N/A值:如果传入值等于N/A则返回NULL,其他值(包括内层已经生成的NULL)原样返回,完全匹配你的转换要求。
补充说明
该写法符合SQL标准,MySQL、PostgreSQL、SQL Server、Oracle等主流关系型数据库均可直接使用。如果后续需要转换的特殊值数量增多,嵌套NULLIF的可读性会下降,这种场景下使用CASE语句是更易维护的选择。
内容的提问来源于stack exchange,提问作者Arsalan
相关产品推荐
相关产品推荐

