2014-12-05 4 views
0

Я хочу, чтобы извлечь все записи на основе поисковой строкиКак получить все записи на основе строки поиска в SQL

Э.Г.

Имя столбца: FileName

MasterRoomTwo.jpg 
BedRoom.png 
MasterbedRoom.gif 

и в простом сценарии можно использовать

Declare @FileName nvarchar(60) = NULL 
set @FileName = '.jpg' 

SELECT * 
FROM JobAttachment 
WHERE AND Tags LIKE '%' + ISNULL(@FileName ,FileName ) + '%' 
ORDER BY updated DESC 

, но в моем случае я буду получать как

set @FileName = '.jpg,.Png,gif' 

Итак, как сделать запрос типа это?

Любая помощь будет оценена по достоинству.

Благодаря

+0

так, как я понимаю, вам нужны все данные из таблицы, где существует «.jpg», «.png», «.gif»? – GeoVIP

ответ

0

Попробуйте это. Split входной строки и использовать charindex

SELECT 'MasterRoomTwo.jpg' a INTO #temp UNION 
SELECT 'BedRoom.png' UNION 
SELECT 'MasterbedRoom.gif' 

DECLARE @FileName NVARCHAR(60) 

SET @FileName = '.jpg,.Png,gif' 

SELECT * 
FROM #temp 
     JOIN (SELECT Rtrim(Ltrim(Split.a.value('.', 'VARCHAR(100)'))) fs 
        FROM (SELECT Cast ('<M>' + Replace(@FileName, ',', '</M><M>') 
             + '</M>' AS XML) AS Data) AS A 
          CROSS APPLY Data.nodes ('/M') AS Split(a)) ad 
on Charindex(fs, a) > 0 
+0

Большое вам спасибо. Это экономит много времени. – ManojSoni

0

Попробуйте это:

SELECT * 
FROM JobAttachment a 
     JOIN (SELECT t1.nod.value('.', 'varchar(50)') tags 
      FROM (SELECT Cast('<N>.' 
           + Replace(Replace(@FileName, '.', ''), ',', '</N><N>.') 
           + '</N>' AS XML) AS format) t 
        CROSS APPLY format.nodes('/N') AS t1(nod) 
      WHERE t1.nod.value('.', 'varchar(50)') <> '.') fileformat 
     ON a.tag LIKE ('%' + fileformat.tags + '%') 
0

Вы можете создать динамическое состояние как

Declare @FileName nvarchar(60) = NULL 
set @FileName = '.jpg,.Png,gif' 


--append a comma to the string to get correct results with empty strings 
--or strings with a single value (no commas) 
SET @FileName = @FileName + ','; 

declare @x XML 
declare @FileSearch nvarchar(max) 
select @x = cast('<F>' + replace (@FileName,',','</F><F>') + '</F>' as xml)  
select @FileSearch = stuff(isnull(@FileSearch , '') + 
        ' OR FileName Like ''%'+ isnull(t.value('.','nvarchar(60)'),'') 
        +'%''' ,1,3,'') 
from @x.nodes('/F') as x(t) 

А затем создать динамический запрос, чтобы получить желаемые результаты:

set @sql = 'select * from test where ' -- entire query goes here 
      + @FileSearch 

exec sp_executesql @sql 

DEMO

+0

Огромное вам спасибо, это экономит много времени. – ManojSoni