2016-02-15 2 views
1

У меня есть форма для ввода пользователем. В поле поля «Имя» пользователь укажет, как он хочет реализовать WILD Card. Например, если он типа abc запрос должен быть:SQL LIKE с различными шаблонами диких карт

Select * from Student where Name Like '%' '@Name' + '%' 

Если он печатает abc** должен сказать запрос для возврата строки, имеющие имя, которые начинаются с abc

Select * from Student where Name Like '@Name' + '%' 

Если он печатает *abc* должен сообщите запрос о возврате строк, имеющих имя, которое заканчивается abc

Select * from Student where Name Like '%' + '@Name' 

Как написать запрос, который будет обрабатывать входные данные этого типа? Будет Regex помощь?

ответ

1

попробовать это

DECLARE @Name AS VARCHAR(100)='abc*' 

if (CHARINDEX('*', @Name)>1) 
    set @Name=Replace(@Name, '*', '%') 
else 
    set @Name='%'[email protected]+'%' 

Declare @sqlText varchar(max)= "Select * from Student where Name Like '" + Replace(userinputtext, "*", "%") + "'"; 
Exec(@sqlText) 
0
Declare @sqlText varchar(max)= "Select * from Student where Name Like '" + Replace(userinputtext, "*", "%") + "'"; 
Exec(@sqlText) 
+0

Сво не любой язык программирования зависит. Я хочу это в SQL –

+0

Я обновил свой ответ. Надеюсь, он поможет вам – FLICKER

+0

Он работает только в случаях '* abc' и' abc * '. Он вернет нулевые строки в случае пользовательских типов 'abc'. Если пользователь не указывает '*' в поле поиска, он должен запрашивать 'like '% abc%'' –

1

Вы должны попробовать что-то вроде ниже,

DECLARE @Name AS VARCHAR(100)='*kklik' 

IF(CHARINDEX('*', @Name) = 1) 
BEGIN 
    Select * from Student where Name Like '@Name' + '%' 
END 
ELSE IF(CHARINDEX('*', @Name) >= 1) 
BEGIN 
    Select * from Student where Name Like '@Name' + '%' 
END 
+0

. Ваш ответ будет делать трюк, но если моя хранимая процедура уже слишком длинная, для этого потребуется еще много кода , Разве вы так не думаете? –

+1

Да, вы правы, но я уже упоминал здесь, что вы должны попробовать что-то вроде ниже, и это всегда означало, что вам нужно использовать небольшую собственную логику в соответствии с вашим состоянием. BTW @Sahi помог вам после прочтения моего ответа, вот что я хотел, чтобы вы сделали ... – pedram

+0

Да, спасибо человеку! –

Смежные вопросы