SQL Server之间的问题

SQL Server之间的问题,sql,sql-server-2005,tsql,Sql,Sql Server 2005,Tsql,我有一个表,将邮政编码范围映射到联系人。邮政编码为不同的国家以多种格式保存 表邮政编码范围: FROM-CODE TO-CODE CONTACT-ID COUNTRY-CODE 12000 12999 18 fr BT000000 BT9ZZZZZ 34 uk ... 从-CODE到-CODE联系人ID国家/地区代码 12000 12999 18 fr BT000000BT9ZZZZZ34英国 ... 要

我有一个表,将邮政编码范围映射到联系人。邮政编码为不同的国家以多种格式保存

表邮政编码范围:

FROM-CODE TO-CODE CONTACT-ID COUNTRY-CODE 12000 12999 18 fr BT000000 BT9ZZZZZ 34 uk ... 从-CODE到-CODE联系人ID国家/地区代码 12000 12999 18 fr BT000000BT9ZZZZZ34英国 ... 要查找特定范围内的联系人,例如从123开始的范围,我使用以下查询:


从邮政编码范围中选择*
其中“123”介于从代码和到代码之间
国家/地区代码='fr'

这将返回第一个条目,即联系人id 18

问题是,如果我搜索'120''12'我没有得到任何结果

知道这里怎么了吗?有人有其他SQL查询吗?

'12'<'120'<'12000'

如果您将from和to代码更改为'12'和'12999'作为'fr',您编写的查询将正常工作,尽管它将包括诸如'121AB'之类的模式,这可能不是有效的法语邮政编码。您可以包括其他验证,例如测试字符串是否只包含数字或其长度

e、 g.做

like '12[0-9][0-9][0-9]'
‘12’<‘120’<‘12000’

如果您将from和to代码更改为'12'和'12999'作为'fr',您编写的查询将正常工作,尽管它将包括诸如'121AB'之类的模式,这可能不是有效的法语邮政编码。您可以包括其他验证,例如测试字符串是否只包含数字或其长度

e、 g.做

like '12[0-9][0-9][0-9]'

您可以使用“12%”之类的选项

或者使用lpad获取前3个字符。

您可以使用类似“12%”的字符。
或者使用lpad获取前3个字符。

我找到了以下解决方案:

select * from postcode-range
where country-code = 'fr' 
and left('12' + '00000000000000', len(from-code)) between from-code and to-code
如果查询长度小于所需的邮政编码长度,则缺少的字符将用零填充。我只是假设邮政编码不超过14个字符

国家代码和查询(此处为'12')仅为占位符。

我找到了以下解决方案:

select * from postcode-range
where country-code = 'fr' 
and left('12' + '00000000000000', len(from-code)) between from-code and to-code
如果查询长度小于所需的邮政编码长度,则缺少的字符将用零填充。我只是假设邮政编码不超过14个字符

国家代码和查询(此处为'12')仅为占位符