Ошибка синтаксиса SQL - PullRequest
       1

Ошибка синтаксиса SQL

0 голосов
/ 08 июня 2010

Я использую Microsoft SQL Server, который я считаю T-SQL или ANSI SQL.

Я хочу найти в базе данных строку. Совпадения, которые соответствуют началу строки, должны идти первыми, а затем сортироваться по алфавиту.

т.е. Если таблица содержит FOO, BAR и RAP

поиск строки 'R' должен дать:

RAP
BAR

В таком порядке.

Вот моя попытка:

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

Сообщение об ошибке: «необходимо объявить скалярную переменную @name»

Ответы [ 4 ]

3 голосов
/ 08 июня 2010
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)
2 голосов
/ 08 июня 2010

.

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;
1 голос
/ 08 июня 2010

В других решениях отсутствует часть «сортировка по алфавиту»:

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
1 голос
/ 08 июня 2010

Кажется, что вы пропустили переменную объявление :

DECALRE @name varchar(50) -- adjust type and length of variable
SET @name = 'phrase' -- for MSSQL 2008 you can do it in one line
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...