如何在SQL中选择使用一系列字符串?

如何在SQL中选择使用一系列字符串?,sql,sql-server,sql-server-2005,Sql,Sql Server,Sql Server 2005,我有一个带有注册号的车辆表,希望选择其中一个子集,该子集介于用户提供的“从”和“到”值之间 让我们假设该表如下所示: id reg_num 1 DD1111 2 DD1112 3 DE2245 4 EE5678 5 EF6547 select * from vehicles where reg_num >= 'DD' -- this value is user supplied and reg_num

我有一个带有注册号的车辆表,希望选择其中一个子集,该子集介于用户提供的“从”和“到”值之间

让我们假设该表如下所示:

id       reg_num
1        DD1111
2        DD1112
3        DE2245
4        EE5678
5        EF6547
select *
from vehicles
where reg_num >= 'DD'   -- this value is user supplied
and reg_num <= 'DE'     -- and so is this one
到目前为止,我使用的SQL如下所示:

id       reg_num
1        DD1111
2        DD1112
3        DE2245
4        EE5678
5        EF6547
select *
from vehicles
where reg_num >= 'DD'   -- this value is user supplied
and reg_num <= 'DE'     -- and so is this one
但相反,只返回:

1        DD1111
2        DD1112
我认为SQL server认为“DE2245”大于“DE”,因此排除了该行


我的问题:如何让SQL server包含所有以“DE”开头的行

您必须在末尾添加尽可能多的“zzzz”,以匹配您的列宽定义

 select * from vehicles 
 where reg_num  >= 'DD' and reg_num <= 'DE' + 'ZZZZZZZZZZZZ'
从车辆中选择*
其中reg_num>='DD'和reg_num
其中reg_num>=@userValueFrom

左(reg_num,char_length(@userValueTo)如果格式得到保证,您只需执行以下操作:

SELECT *
FROM vehicles 
WHERE LEFT(reg_num, 2) BETWEEN 'DD' AND 'DE'

但是,这又一次被认为是不可取的——这总是让我感到困惑,因为肯定可以使用regu num上的索引…

DE2245不小于DE。更清楚地说,DE2245小于DE3

,或者你可以“递增”它使用'DF'并使用@Pax——这是真的,我只记得很久以前在DB2项目中看到过这一点——有趣的是,我们必须使用与最高字符数相等的EBCDIC:)幸运的是,DB2/z现在可以使用Unicode(尽管我们的许多客户仍然坚持:-)。而且,尽管我们拥有所有用于z/Linux的高级自由/开源软件工具,但z/OS UNIX系统服务并没有编译一半的内容,因为它仍然是EBCDIC的。