CASE WHEN ', ' + dbo.Table.Column +',' LIKE '%, lactulose,%'
THEN 'BP Medication' ELSE '' END AS [BP Medication]
Den ledande ', '
och efterföljande ','
läggs till så att du kan hantera matchningen oavsett var den är i strängen (första posten, sista posten eller någonstans däremellan).
Som sagt, varför lagrar du data du vill söka på som en kommaseparerad sträng? Detta bryter mot alla typer av former och bästa praxis. Du bör överväga att normalisera ditt schema.
Dessutom:använd inte 'single quotes'
som identifierare avgränsare; denna syntax är utfasad. Använd [square brackets]
(föredraget) eller "double quotes"
om du måste. Se "strängbokstavar som kolumnalias" här:http ://msdn.microsoft.com/en-us/library/bb510662%28SQL.100%29.aspx
REDIGERA Om du har flera värden kan du göra detta (du kan inte förkorta detta med den andra CASE
syntaxvariant eller genom att använda något som IN()
):
CASE
WHEN ', ' + dbo.Table.Column +',' LIKE '%, lactulose,%'
WHEN ', ' + dbo.Table.Column +',' LIKE '%, amlodipine,%'
THEN 'BP Medication' ELSE '' END AS [BP Medication]
Om du har fler värden kan det vara värt att använda en delad funktion, t.ex.
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
Resultat:
ID
----
1
2
4