CASE WHEN ', ' + dbo.Table.Column +',' LIKE '%, lactulose,%'
THEN 'BP Medication' ELSE '' END AS [BP Medication]
Den førende ', '
og efterfølgende ','
tilføjes, så du kan håndtere matchen uanset hvor den er i strengen (første indtastning, sidste indtastning eller hvor som helst midt imellem).
Når det er sagt, hvorfor gemmer du data, du vil søge på, som en kommasepareret streng? Dette overtræder alle former for former og bedste praksis. Du bør overveje at normalisere dit skema.
Derudover:Brug ikke 'single quotes'
som identifikatorafgrænsere; denne syntaks er forældet. Brug [square brackets]
(foretrukket) eller "double quotes"
hvis du skal. Se "streng literals som kolonnealiaser" her:http ://msdn.microsoft.com/en-us/library/bb510662%28SQL.100%29.aspx
REDIGER Hvis du har flere værdier, kan du gøre dette (du kan ikke forkorte dette med den anden CASE
syntaksvariant eller ved at bruge noget som IN()
):
CASE
WHEN ', ' + dbo.Table.Column +',' LIKE '%, lactulose,%'
WHEN ', ' + dbo.Table.Column +',' LIKE '%, amlodipine,%'
THEN 'BP Medication' ELSE '' END AS [BP Medication]
Hvis du har flere værdier, kan det betale sig at bruge en splitfunktion, f.eks.
USE tempdb;
GO
CREATE FUNCTION dbo.SplitStrings(@List NVARCHAR(MAX))
RETURNS TABLE
AS
RETURN ( SELECT DISTINCT Item FROM
( SELECT Item = x.i.value('(./text())[1]', 'nvarchar(max)')
FROM ( SELECT [XML] = CONVERT(XML, '<i>'
+ REPLACE(@List,',', '</i><i>') + '</i>').query('.')
) AS a CROSS APPLY [XML].nodes('i') AS x(i) ) AS y
WHERE Item IS NOT NULL
);
GO
CREATE TABLE dbo.[Table](ID INT, [Column] VARCHAR(255));
GO
INSERT dbo.[Table] VALUES
(1,'lactulose, Lasix (furosemide), oxazepam, propranolol, rabeprazole, sertraline,'),
(2,'lactulite, Lasix (furosemide), lactulose, propranolol, rabeprazole, sertraline,'),
(3,'lactulite, Lasix (furosemide), oxazepam, propranolol, rabeprazole, sertraline,'),
(4,'lactulite, Lasix (furosemide), lactulose, amlodipine, rabeprazole, sertraline,');
SELECT t.ID
FROM dbo.[Table] AS t
INNER JOIN dbo.SplitStrings('lactulose,amlodipine') AS s
ON ', ' + t.[Column] + ',' LIKE '%, ' + s.Item + ',%'
GROUP BY t.ID;
GO
Resultater:
ID
----
1
2
4