Tsql 比较SQL Server中范围上的字符串

Tsql 比较SQL Server中范围上的字符串,tsql,sql-server-2012,Tsql,Sql Server 2012,我正在尝试查询数据库中某个范围内要匹配的字符串。该表有两列FromCode和ToCode 下面是示例数据(假设该表名为CodeList): 因此,如果我运行查询 选择* 从代码列表 其中FromCode='IV1 1AB' 它将返回结果 IV1 0AA IV9 9ZZ 这是正确的。但是,当我运行此程序时: 选择* 从代码列表 其中FromCode='IV2 1AB' 我得到的结果是 IV1 0AA IV9 9ZZ IV10 0AA IV28 9ZZ 因此,对于人类而言,字

我正在尝试查询数据库中某个范围内要匹配的字符串。该表有两列
FromCode
ToCode

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

因此,如果我运行查询

选择*
从代码列表
其中FromCode='IV1 1AB'
它将返回结果

IV1 0AA   IV9 9ZZ 
这是正确的。但是,当我运行此程序时:

选择*
从代码列表
其中FromCode='IV2 1AB'
我得到的结果是

IV1 0AA    IV9 9ZZ
IV10 0AA   IV28 9ZZ
因此,对于人类而言,字符串
IV2 2AB
IV1 0AA-IV9 9ZZ
内,而不是
IV10 0AA-IV28 9ZZ

如果有人能提出一个更好的方法来搜索数据,我们将不胜感激。另外,我正在运行的引擎是SQL Server 2012

非常感谢

选择*
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)
从代码列表 其中Cast(子字符串(替换(从代码,,,'')3,Len(替换(从代码,,'')-4)为int)=Cast(子字符串(替换('IV2 1AB','',''),3,Len(替换('IV2 1AB','','')-4)为int)

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

比较为lefttoright。IV2(2)比iv10(1)大。
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)