当前,我正在尝试获取符合我条件的记录。
我正在使用通配符运算符,但未按我期望的那样获取记录。
我的表中有多个记录,并且正在使用以下查询:
select *
from My_table
where RegNum like '117[15-24]%'
我以为上面的查询将获取从11715到11724的记录,但是当前它正在获取从11710到11719的记录。我知道%
通配符将只考虑单个数字。
是否还有其他方法可以在通配符运算符中使用两位数,还是有其他解决方案来获取我要查找的记录?
答案 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
但这在逻辑上等同于原始字符串比较。