Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

समान कथन के बजाय CASE (शामिल है)

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL सर्वर में सत्र संदर्भ में कुंजी/मान जोड़े सेट करें (sp_set_session_context)

  2. मैं एसक्यूएल सर्वर के बीच में ऊपरी सीमा को कैसे बाहर कर सकता हूं?

  3. SQL सर्वर में एक वृद्धिशील GUID बनाने के लिए NEWSEQUENTIALID() का उपयोग करें

  4. SQL 'DDMMYY' को डेटाटाइम में बदलें

  5. डिग्री () SQL सर्वर में उदाहरण