2010-06-08 179 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