CASE WHEN ', ' + dbo.Table.Column +',' LIKE '%, lactulose,%'
THEN 'BP Medication' ELSE '' END AS [BP Medication]
', '
hàng đầu và dấu ', '
được thêm vào để bạn có thể xử lý đối sánh bất kể nó nằm ở đâu trong chuỗi (mục nhập đầu tiên, mục nhập cuối cùng hoặc bất kỳ vị trí nào ở giữa).
Điều đó nói lên rằng, tại sao bạn lại lưu trữ dữ liệu mà bạn muốn tìm kiếm dưới dạng một chuỗi được phân tách bằng dấu phẩy? Điều này vi phạm tất cả các loại biểu mẫu và thực tiễn tốt nhất. Bạn nên xem xét việc chuẩn hóa lược đồ của mình.
Ngoài ra:không sử dụng 'single quotes'
làm dấu phân cách định danh; cú pháp này không được dùng nữa. Sử dụng [square brackets]
(ưu tiên) hoặc "double quotes"
nếu bạn phải. Xem "chuỗi ký tự dưới dạng bí danh cột" tại đây: http ://msdn.microsoft.com/en-us/library/bb510662%28SQL.100%29.aspx
CHỈNH SỬA Nếu bạn có nhiều giá trị, bạn có thể làm điều này (bạn không thể sử dụng giá trị này với CASE
khác biến thể cú pháp hoặc bằng cách sử dụng một cái gì đó như IN()
):
CASE
WHEN ', ' + dbo.Table.Column +',' LIKE '%, lactulose,%'
WHEN ', ' + dbo.Table.Column +',' LIKE '%, amlodipine,%'
THEN 'BP Medication' ELSE '' END AS [BP Medication]
Nếu bạn có nhiều giá trị hơn, bạn nên sử dụng hàm phân tách, ví dụ:
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
Kết quả:
ID
----
1
2
4