SQL Server:统计数据集'//'数量并判断是否所有行含该字符串
解决SQL Server中判定代码行是否为注释的问题
嘿,你已经搞定了统计每行//数量的核心步骤,接下来完成判断逻辑超简单!咱们直接在现有查询基础上扩展就行:
方案1:直接添加判定列
你可以用CASE语句,基于已计算的col3counter值生成一个明确的判定结果列,一眼就能区分出该行是否为注释:
SELECT col1, col2, LEN(col3) - LEN(REPLACE(col3, '//', '')) AS col3counter, -- 判定逻辑:只要//数量大于0,就标记为注释行 CASE WHEN (LEN(col3) - LEN(REPLACE(col3, '//', ''))) > 0 THEN '注释行' ELSE '非注释行' END AS is_comment FROM #tmp
方案2:用CTE避免重复计算
如果觉得重复写计数公式有点冗余,可以用CTE先统一计算好//的数量,再做判定,代码会更整洁:
WITH CommentLineStats AS ( SELECT col1, col2, -- 处理col3为NULL的情况,避免计算出NULL值 LEN(ISNULL(col3, '')) - LEN(REPLACE(ISNULL(col3, ''), '//', '')) AS col3counter FROM #tmp ) SELECT *, CASE WHEN col3counter > 0 THEN '注释行' ELSE '非注释行' END AS is_comment FROM CommentLineStats
额外补充:快速筛选特定行
如果只需要提取所有注释行或者非注释行,直接给原查询加WHERE子句即可:
-- 只获取所有注释行 SELECT col1, col2, col3, LEN(col3) - LEN(REPLACE(col3, '//', '')) AS col3counter FROM #tmp WHERE LEN(col3) - LEN(REPLACE(col3, '//', '')) > 0
小提示:如果col3字段可能存在NULL值,一定要用ISNULL(col3, '')包裹,不然LEN(NULL)会返回NULL,导致计数结果异常哦!
内容的提问来源于stack exchange,提问作者pbbire
相关产品推荐
相关产品推荐

