如何简洁检测多列是否为0或NULL并生成二进制字符串?
需求与SQL优化询问
功能需求
检测多列是否包含正数,返回二进制字符串;当列值为0或NULL时对应位为0,正数则为1(示例:101表示A、C列为正数,B列为0或NULL)。
现有实现代码
SELECT format( iif(coalesce([A], 0) > 0, 100, 0) + iif(coalesce([B], 0) > 0, 10, 0) + iif(coalesce([C], 0) > 0, 1, 0) , '000' )
优化疑问
是否有更简洁的实现方式,比如避免使用COALESCE?
优化方案
可以直接通过IIF结合字符串拼接实现,完全无需COALESCE,逻辑更直观简洁:
SELECT CONCAT( IIF([A] > 0, '1', '0'), IIF([B] > 0, '1', '0'), IIF([C] > 0, '1', '0') ) AS positive_binary
方案说明
- SQL中如果列值为
NULL,[列名] > 0会返回NULL,IIF会将NULL判定为false,自动返回'0',正好匹配需求中“NULL或0对应位为0”的规则。 - 直接拼接每一位的结果,无需通过数值计算再格式化,代码可读性更高,也避免了
COALESCE的使用。
内容的提问来源于stack exchange,提问作者Przemyslaw Remin
相关产品推荐
相关产品推荐

