MS SQL Server中使用LIKE运算符验证数字值的问题
解决办法:用正则表达式精准匹配合法数值
LIKE运算符的通配符(%、_)没法精准控制小数点数量、符号位置这类规则,改用正则表达式能直接满足你的筛选需求。
核心匹配规则
我们需要匹配的是:可选负号开头,后面跟整数,最多带一组小数部分(小数点+数字),对应的正则表达式为:^-?\d+(\.\d+)?$
拆分规则:
^:匹配字符串开头,确保没有前置非法字符(比如$、#)-?:允许0个或1个负号\d+:至少1个数字(整数部分)(\.\d+)?:可选的小数部分,要求是小数点+至少1个数字,且最多出现1次$:匹配字符串结尾,确保没有后置非法字符(比如-)
不同数据库的实现示例
MySQL/MariaDB
使用REGEXP关键字:
SELECT your_column FROM your_table WHERE your_column REGEXP '^-?[0-9]+(\.[0-9]+)?$';
PostgreSQL
使用~运算符:
SELECT your_column FROM your_table WHERE your_column ~ '^-?\d+(\.\d+)?$';
SQL Server
使用PATINDEX函数:
SELECT your_column FROM your_table WHERE PATINDEX('^-?[0-9]%(\.[0-9]+)?$', your_column) = 1;
验证效果
针对你给出的测试值,这个正则会精准筛选出:99、-99、99.99、-99.99,自动排除带特殊符号、多小数点、首尾非法字符的数值。
内容的提问来源于stack exchange,提问作者Prakash
相关产品推荐
相关产品推荐

