SQL如何在字符串字段中精确匹配独立存在的指定数值
解决方案
方法1:通用LIKE实现(兼容所有SQL数据库)
核心思路是给目标字段前后补空格,把「开头/结尾的293」统一转换为「前后带空格的293」,再统一匹配:
SELECT * FROM LeadTimeNodes WHERE CONCAT(' ', ParentCombination, ' ') LIKE '% 293 %';
- 适配说明:如果使用的是不支持
CONCAT函数的老版本SQL Server,可替换为' ' + ParentCombination + ' '。
匹配验证
该写法完全符合你给出的所有规则:
'3293 >>> 671':补空格后为' 3293 >>> 671 ',无单独的293片段,不匹配'293':补空格后为' 293 ',匹配成功'479 >>> 12930':补空格后无单独的293片段,不匹配'6000 >>> 293':补空格后为' 6000 >>> 293 ',匹配成功'293 >>> 1600':补空格后为' 293 >>> 1600 ',匹配成功
方法2:正则实现(支持正则的数据库适用)
如果你的数据库支持正则匹配,写法更精简,也可适配更多分隔符场景:
MySQL/MariaDB 示例
SELECT * FROM LeadTimeNodes WHERE ParentCombination REGEXP '(^| )293( |$)';
PostgreSQL 示例
SELECT * FROM LeadTimeNodes WHERE ParentCombination ~ '(^|\s)293(\s|$)';
SQL Server 示例
SELECT * FROM LeadTimeNodes WHERE PATINDEX('%[^0-9]293[^0-9]%', ' ' + ParentCombination + ' ') > 0;
- 正则逻辑说明:
(^| )匹配字符串开头或前置空格,( |$)匹配后置空格或字符串结尾,确保293是独立存在的数值,不会匹配到其他长数字的片段。
内容的提问来源于stack exchange,提问作者David
相关产品推荐
相关产品推荐

