如何使用like运算符获取一定范围的数字

时间:2019-07-17 15:09:54

标签: sql sql-server

当前,我正在尝试获取符合我条件的记录。

我正在使用通配符运算符,但未按我期望的那样获取记录。

我的表中有多个记录,并且正在使用以下查询:

select *
from My_table
where RegNum like '117[15-24]%'

我以为上面的查询将获取从11715到11724的记录,但是当前它正在获取从11710到11719的记录。我知道%通配符将只考虑单个数字。

是否还有其他方法可以在通配符运算符中使用两位数,还是有其他解决方案来获取我要查找的记录?

2 个答案:

答案 0 :(得分:1)

我推测您正在使用SQL Server。比较数值范围时,最好的办法就是使用不等式。如果您的RegNum列是文本,则将其首先转换为整数,然后进行比较:

SELECT *
FROM My_table
WHERE (CAST RegNum AS int) BETWEEN 11715 AND 11724;

如果您想使用LIKE,我们可以尝试:

SELECT *
FROM My_table
WHERE RegNum LIKE '1171[5-9]' OR RegNum LIKE '1172[0-4]';

答案 1 :(得分:0)

您想要的逻辑也许可以通过以下方式更好地捕获:

where left(regnum, 5) between '11715' and '11724'

并非所有数据库都支持left(),在这些数据库中,请改用substring函数。

您想在数字范围内使用like有一个逻辑谬误。 like用于字符串。如果需要数字范围,请使用数字。您可以在上述条件下执行此操作:

where cast(left(regnum, 5) as int) between 11715 and 11724

但这在逻辑上等同于原始字符串比较。