2011-02-27 85 views
0

使用SQL Server 2005通過數值搜索

表1

ID Value 

ABC001 
BCE002 
... 

我有搜索欄,當我搜索這樣的「001」它顯示爲空,當我搜索「ABC001」的ID,然後在它顯示了價值。

查詢

Select * from table where id = '" & txtid & "' 

txtid =文本

我想在ID只搜索數值。

如何寫數字的搜索查詢。

需要查詢幫助

+0

總是前3個字母?第一 – gbn 2011-02-27 08:25:42

+0

@gbn,總是3個字母 – Gopal 2011-02-27 20:15:38

回答

3
select * from MyTable 
where Value LIKE '[A-Z][A-Z][A-Z]001' 

OR

select * from MyTable 
where Value LIKE '[A-Z][A-Z][A-Z]' + RIGHT('000' + CONVERT(VARCHAR, @id), 3) 
1
SELECT * FROM Table1 WHERE id LIKE '%001' 
+0

這是** **保證壓制任何索引的使用,因此總是會導致一個表掃描 - 不是很有效...... – 2011-02-27 08:28:17

+0

@Marc而且也不會掃描解決方案嗎? – RichardTheKiwi 2011-02-27 09:28:33

0

由米奇小麥給出的答案,如果每次你給ID爲上限,然後其中有一個數字的值3個字母的工作3位數字。

通過rayman86給出的答案基本上是忽略在前面放置任何物品。它只是尋找什麼,如果該ID的長度變化和/或前幾個字符,甚至不信,這是更好地使用rayman86提供了代碼以001

結束。所以只需使用SELECT * FROM Table WHERE ID LIKE '%Numbers'其中Numbers是您的數值。

+1

米奇小麥的回答至少會使用索引的可能性最大。任何具有前導%的東西都不會。 – gbn 2011-02-27 08:26:25

+0

@gbn它不會。所有假設,但我會假設數據是沿(A-Z)'鉛炭均勻分佈'在這種情況下'像範圍的選擇性「[A-Z] ..」'= 1和完全無用的索引的使用。 – RichardTheKiwi 2011-02-27 09:30:10

+0

不完全推薦使用%。但如果前3位數字總是'[A-Z]',那就沒問題了。理查德給出的答案几乎將大部分數據去掉了。但如果只有這個數字很重要,那就沒問題。請記住,您可能在現實世界中擁有相同數值的ID。所以在技術上,所有這些方法都不適用於工作世界。但現在,它應該是足夠的。 – 2011-02-27 15:42:22

0

的問題未做任何假設字面解釋:

創建此功能

create function dbo.numericonly(@s varchar(max)) 
returns float as 
begin 
declare @i int set @i = 1 
while @i <= len(@s) 
    if ascii(substring(@s,@i,1)) between 48 and 57 
    set @i = @i + 1 
    else 
    set @s = stuff(@s,@i,1,'') 
return @s 
end 
GO 

使用此查詢

Select * from table1 where dbo.numericonly(id) = '" & txtid & "'