我想根据搜索字符串
获取所有记录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 :(得分: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 + '%' )
答案 1 :(得分: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
答案 2 :(得分: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