CASE WHEN ', ' + dbo.Table.Column +',' LIKE '%, lactulose,%'
THEN 'BP Medication' ELSE '' END AS [BP Medication]
अग्रणी ', '
और पीछे ','
जोड़े जाते हैं ताकि आप मैच को संभाल सकें, भले ही वह स्ट्रिंग में कहीं भी हो (पहली प्रविष्टि, अंतिम प्रविष्टि, या बीच में कहीं भी)।
उस ने कहा, आप उस डेटा को क्यों संग्रहीत कर रहे हैं जिसे आप अल्पविराम से अलग स्ट्रिंग के रूप में खोजना चाहते हैं? यह सभी प्रकार के रूपों और सर्वोत्तम प्रथाओं का उल्लंघन करता है। आपको अपने स्कीमा को सामान्य बनाने पर विचार करना चाहिए।
इसके अलावा:'single quotes'
का इस्तेमाल न करें पहचानकर्ता सीमांकक के रूप में; यह वाक्यविन्यास बहिष्कृत है। [square brackets]
का उपयोग करें (पसंदीदा) या "double quotes"
यदि आपको अवश्य करना हो। "स्ट्रिंग लिटरल को कॉलम एलियास के रूप में" यहां देखें:http ://msdn.microsoft.com/en-us/library/bb510662%28SQL.100%29.aspx
संपादित करें यदि आपके पास एकाधिक मान हैं, तो आप ऐसा कर सकते हैं (आप इसे अन्य CASE
के साथ संक्षिप्त नहीं कर सकते हैं सिंटैक्स प्रकार या IN()
. जैसी किसी चीज़ का उपयोग करके ):
CASE
WHEN ', ' + dbo.Table.Column +',' LIKE '%, lactulose,%'
WHEN ', ' + dbo.Table.Column +',' LIKE '%, amlodipine,%'
THEN 'BP Medication' ELSE '' END AS [BP Medication]
यदि आपके पास अधिक मान हैं, तो स्प्लिट फ़ंक्शन का उपयोग करना उपयोगी हो सकता है, उदा.
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
परिणाम:
ID
----
1
2
4