2011-02-27 88 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 & "'