如何选择在SQL中使用一系列字符串?
问题描述:
我有一个车辆登记号码表,并且希望选择一些用户提供的'from'和'to'值之间的子集。如何选择在SQL中使用一系列字符串?
因此,可以说该表看起来像这样:
id reg_num
1 DD1111
2 DD1112
3 DE2245
4 EE5678
5 EF6547
的SQL我到目前为止是这样的:
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
3 DE2245
但是,只能返回:
1 DD1111
2 DD1112
我想SQL服务器认为'DE2245'大于'DE',因此排除了该行。
我的问题:如何让SQL服务器包含所有以'DE'开头的行?
答
where reg_num >= @userValueFrom
and left(reg_num,char_length(@userValueTo) <= @userValueTo
但请注意,这其中不使用,因为在特区政府的列的函数中的任何指标。
答
您必须在最后添加'zzzz'以尽可能多地匹配您的列宽定义。
select * from vehicles
where reg_num >= 'DD' and reg_num <= 'DE' + 'ZZZZZZZZZZZZ'
答
如果格式有保证,你可以简单地做:
SELECT *
FROM vehicles
WHERE LEFT(reg_num, 2) BETWEEN 'DD' AND 'DE'
但同样,这是认为不会优化搜索 - 这总是令我感到困惑,因为在一定的reg_num指数可用于...
答
DE2245不小于DE。为了使它更清楚,DE2245小于DE
或者你可以“增加”它到'DF'并使用 paxdiablo 2009-02-03 04:21:41