2010-06-08 145 views
0

我正在使用Microsoft SQL Server,我认为它是T-SQL或ANSI SQL。SQL语法错误

我想使用字符串搜索数据库。适合字符串乞讨的匹配应该先来,然后按字母顺序排序。

I.e.如果表中包含FOOBARRAP

的字符串'R'搜索应该产生:

RAP
BAR

的顺序。

这里是我的尝试:

SELECT  Name 
FROM  MyTable 
WHERE  (Name LIKE '%' + @name + '%') 
ORDER BY (IF(Name LIKE @name + '%',1,0)) 

的错误信息是: “必须声明标量变量@name”

回答

3
declare @name varchar(10) 
set @name='R' 
SELECT  Name 
FROM  (select 'foo' as name union select 'RAP' union select 'BAR') MyTable 
WHERE  (Name LIKE '%' + @name + '%') 
ORDER BY charindex(@name ,name) 
+0

我喜欢这个解决方案最好,charindex更紧凑,并提供更好的排序顺序。 – Robert 2010-06-08 11:19:02

2

DECLARE @name VARCHAR(MAX); 
SET @name = 'foo'; 

SELECT  Name 
FROM  MyTable 
WHERE  Name LIKE '%' + @name + '%' 
ORDER BY CASE WHEN Name LIKE @name + '%' THEN 1 ELSE 0 END; 
+0

这正是我正试图处理IF声明。 – Robert 2010-06-08 11:17:36

1

看来你错过变量声明

DECALRE @name varchar(50) -- adjust type and length of variable 
SET @name = 'phrase' -- for MSSQL 2008 you can do it in one line 
1

其他的解决方案似乎错过了 “按字母” 部分:

DECLARE @Search VARCHAR(MAX) 
SET  @Search = 'R' 

SELECT  0, Name 
FROM  MyTable 
WHERE  Name LIKE @Search + '%' 
UNION ALL 
SELECT  1, Name 
FROM  MyTable 
WHERE  Name like '%_' + @Search + '%' 
ORDER BY 1, 2 
+0

这是一个聪明的想法,我试图用这种方式开始,但我无法让工会工作。 – Robert 2010-06-08 11:15:28