使用SQL Server 2005通過數值搜索
表1
ID Value
ABC001
BCE002
...
我有搜索欄,當我搜索這樣的「001」它顯示爲空,當我搜索「ABC001」的ID,然後在它顯示了價值。
查詢
Select * from table where id = '" & txtid & "'
txtid =文本
我想在ID只搜索數值。
如何寫數字的搜索查詢。
需要查詢幫助
使用SQL Server 2005通過數值搜索
表1
ID Value
ABC001
BCE002
...
我有搜索欄,當我搜索這樣的「001」它顯示爲空,當我搜索「ABC001」的ID,然後在它顯示了價值。
查詢
Select * from table where id = '" & txtid & "'
txtid =文本
我想在ID只搜索數值。
如何寫數字的搜索查詢。
需要查詢幫助
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)
SELECT * FROM Table1 WHERE id LIKE '%001'
這是** **保證壓制任何索引的使用,因此總是會導致一個表掃描 - 不是很有效...... – 2011-02-27 08:28:17
@Marc而且也不會掃描解決方案嗎? – RichardTheKiwi 2011-02-27 09:28:33
由米奇小麥給出的答案,如果每次你給ID爲上限,然後其中有一個數字的值3個字母的工作3位數字。
通過rayman86給出的答案基本上是忽略在前面放置任何物品。它只是尋找什麼,如果該ID的長度變化和/或前幾個字符,甚至不信,這是更好地使用rayman86提供了代碼以001
結束。所以只需使用SELECT * FROM Table WHERE ID LIKE '%Numbers'
其中Numbers是您的數值。
米奇小麥的回答至少會使用索引的可能性最大。任何具有前導%的東西都不會。 – gbn 2011-02-27 08:26:25
@gbn它不會。所有假設,但我會假設數據是沿(A-Z)'鉛炭均勻分佈'在這種情況下'像範圍的選擇性「[A-Z] ..」'= 1和完全無用的索引的使用。 – RichardTheKiwi 2011-02-27 09:30:10
不完全推薦使用%。但如果前3位數字總是'[A-Z]',那就沒問題了。理查德給出的答案几乎將大部分數據去掉了。但如果只有這個數字很重要,那就沒問題。請記住,您可能在現實世界中擁有相同數值的ID。所以在技術上,所有這些方法都不適用於工作世界。但現在,它應該是足夠的。 – 2011-02-27 15:42:22
的問題未做任何假設字面解釋:
創建此功能
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 & "'
總是前3個字母?第一 – gbn 2011-02-27 08:25:42
@gbn,總是3個字母 – Gopal 2011-02-27 20:15:38