修正SQL查询:匹配1P[01-99]Kxxx格式Area并汇总Quantity
解决SQL匹配特定格式Area并汇总Quantity的问题
原查询的问题
原查询无法得到预期结果的核心原因:
- 误用
=匹配通配符:SQL中=会严格匹配字符串,下划线_在这里是普通字符,无法实现"匹配任意单个字符"的效果 - 大小写不兼容:示例数据里的Area包含小写
p/k,但查询条件用的是大写1P__K,导致匹配失败 - 格式校验不严谨:未验证第3-4位是01-99的有效数字,也没限定Area必须是8位字符串
修正后的查询方案
方案1:通用LIKE匹配(兼容多数SQL数据库)
统一大小写后用通配符匹配,同时补充格式校验:
SELECT label, COALESCE(SUM(CASE WHEN LOWER(area) LIKE '1p[0-9][0-9]k___' AND LEN(area) = 8 AND CAST(SUBSTRING(area, 3, 2) AS INT) BETWEEN 1 AND 99 THEN quantity END), 0) AS '1P_K' FROM my_table WITH (NOLOCK) GROUP BY label
方案2:PATINDEX正则匹配(适用于SQL Server)
用正则式实现更精准的格式匹配:
SELECT label, COALESCE(SUM(CASE WHEN PATINDEX('%1[Pp][0-9][0-9][Kk]___%', area) = 1 AND LEN(area) = 8 AND CAST(SUBSTRING(area, 3, 2) AS INT) BETWEEN 1 AND 99 THEN quantity END), 0) AS '1P_K' FROM my_table WITH (NOLOCK) GROUP BY label
结果验证
针对你提供的示例数据,以上查询均会返回预期结果:
| Label | 1P_K |
|---|---|
| L1 | 100 |
内容的提问来源于stack exchange,提问作者David
相关产品推荐
相关产品推荐

