如何在WHERE IN字符串列表条件中使用SQL SUBSTRING去除mem前缀
实现方案
方案1:优先推荐(修改成本最低,语法简洁)
你只需要先批量把IN列表中所有值的mem前缀删除,再对pnumber字段做前缀截取即可,通用语法如下:
WHERE SUBSTRING(pnumber, 4) IN ('1234', '2345', '8978')
说明:mem为固定3位前缀,所以SUBSTRING从第4位开始截取,即可得到去除前缀后的内容,该语法适配MySQL、SQL Server、Oracle等绝大多数主流数据库,部分数据库也可简写为SUBSTR(pnumber, 4),效果完全一致。
方案2:无需修改现有IN列表(适合不想批量处理数百条条目的场景)
如果你不想改动已经整理好的带mem前缀的IN列表,也可以用以下写法,强制用SUBSTRING完成前缀匹配逻辑:
WHERE SUBSTRING(pnumber, 4) IN ( SUBSTRING('mem1234', 4), SUBSTRING('mem2345', 4), SUBSTRING('mem8978', 4) )
注意:该方案需要给每个IN条目都加上SUBSTRING处理,修改量更大,且无法利用
pnumber字段的索引,性能低于方案1,非特殊情况不推荐使用。
内容的提问来源于stack exchange,提问作者Dean-O
相关产品推荐
相关产品推荐

