2014-12-05 4 views
0

검색 문자열을 기준으로 모든 레코드를 가져오고 싶습니다. 검색 문자열검색 문자열 기준으로 모든 레코드를 얻는 방법

E.G.

열 이름 : 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

를 사용하는 입력 문자열? – GeoVIP

답변

0

보십시오. 분할하고 난 당신이 '.gif 참고', '.JPG', '.png를을'존재하는 테이블에서 모든 데이터가 필요 이해할 수 있도록로 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

관련 문제