0

我正在尝试查询一个字符串以匹配数据库中的某个范围。该表有 2 列FromCodeToCode.

以下是示例数据(假设表名为CodeList):

FromCode    ToCode
IV1 0AA     IV9 9ZZ
IV10 0AA    IV28 9ZZ
IV30 0AA    IV32 9ZZ
IV36 0AA    IV36 9ZZ
IV40 0AA    IV49 9ZZ
IV51 0AA    IV56 9ZZ
IV63 0AA    IV63 9ZZ

所以,如果我运行查询

SELECT *
FROM CodeList
WHERE FromCode <= 'IV1 1AB' AND ToCode >= 'IV1 1AB'

它会返回结果

IV1 0AA   IV9 9ZZ 

哪个是对的。但是,当我运行这个时:

SELECT *
FROM CodeList
WHERE FromCode <= 'IV2 1AB' AND ToCode >= 'IV2 1AB'

我回来的结果是

IV1 0AA    IV9 9ZZ
IV10 0AA   IV28 9ZZ

所以,对于人类来说,字符串IV2 2ABIV1 0AA - IV9 9ZZnot之内IV10 0AA - IV28 9ZZ

如果有人可以提出更好的方法来搜索数据,将不胜感激。另外,我运行它的引擎是 SQL Server 2012。

非常感谢!

4

1 回答 1

0
SELECT *
FROM CodeList
WHERE Cast(Substring(Replace(FromCode,' ',''),3,Len(Replace(FromCode,' ',''))-4) as int) <= Cast(Substring(Replace('IV2 1AB',' ',''),3,Len(Replace('IV2 1AB',' ',''))-4) as int)
 AND Cast(Substring(Replace(ToCode,' ',''),3,Len(Replace(ToCode,' ',''))-4) as int) >= Cast(Substring(Replace('IV2 1AB',' ',''),3,Len(Replace('IV2 1AB',' ',''))-4) as int)

将其设置在函数中以使使用更容易

于 2012-08-18T10:38:15.497 回答