2009-02-03 43 views
2

我有一個車輛登記號碼錶,並且希望選擇一些用戶提供的'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'開頭的行?

回答

5
where reg_num >= @userValueFrom 
and left(reg_num,char_length(@userValueTo) <= @userValueTo 

但請注意,這其中不使用,因爲在特區政府的列的函數中的任何指標。

7

您必須在最後添加'zzzz'以儘可能多地匹配您的列寬定義。

select * from vehicles 
where reg_num >= 'DD' and reg_num <= 'DE' + 'ZZZZZZZZZZZZ' 
+0

或者你可以「增加」它到'DF'並使用<,而不是<=。 – paxdiablo 2009-02-03 04:21:41

1

如果格式有保證,你可以簡單地做:

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

但同樣,這是認爲不會優化搜索 - 這總是令我感到困惑,因爲在一定的reg_num指數可用於...

0

DE2245不小於DE。爲了使它更清楚,DE2245小於DE

相關問題