2014-12-05 51 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

相关问题