使用SQL Where子句匹配多段数字字符串未得到预期结果怎么办
问题原因
你写的LIKE语句无法生效有两个核心原因:
- 标准SQL的
LIKE操作符仅支持%(匹配任意长度任意字符)、_(匹配单个任意字符)两种通配符,你用到的[0-9.,]是正则表达式语法,仅部分数据库对LIKE做了自定义扩展才支持该规则。 - 即使是支持
[]匹配的数据库,你的写法也仅能匹配单个数字、小数点或逗号,无法匹配1000、10,5这类多字符组成的数值,自然匹配不到目标格式。
解决方案
主流数据库均支持正则匹配功能,直接用正则匹配数字/数字/数字格式即可,不同数据库的写法如下:
MySQL / MariaDB
SELECT * FROM table_a WHERE table_a.value REGEXP '[0-9.,]+ / [0-9.,]+ / [0-9.,]+' LIMIT 3;
PostgreSQL
SELECT * FROM table_a WHERE table_a.value ~ '[0-9.,]+ / [0-9.,]+ / [0-9.,]+' LIMIT 3;
Oracle
SELECT * FROM table_a WHERE REGEXP_LIKE(table_a.value, '[0-9.,]+ / [0-9.,]+ / [0-9.,]+') FETCH FIRST 3 ROWS ONLY;
SQL Server(2017及以上版本)
SELECT TOP 3 * FROM table_a WHERE REGEXP_MATCHES(table_a.value, '[0-9.,]+ / [0-9.,]+ / [0-9.,]+');
正则说明:[0-9.,]+表示匹配1个及以上的数字、小数点或逗号,正好对应你需求里的整数、带小数/逗号的数值格式。
内容的提问来源于stack exchange,提问作者Zayfaya83
相关产品推荐
相关产品推荐

