2014-12-05 50 views
0

我想根據搜索字符串獲取所有記錄如何根據搜索字符串獲取所有記錄在sql

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

使我明白你從那裏存在名爲.jpg「,「.png格式」表所需要的所有數據,「.gif注意」? – GeoVIP 2014-12-05 07:33:01

回答

0

試試這個。 拆分輸入字符串和使用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 2014-12-08 07:57:29

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 2014-12-08 09:15:59

相關問題