使用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