MySQL FIND_IN_SET(): कॉमा-सेपरेटेड मानों में खोज
FIND_IN_SET(str, csv_list) फंक्शन जांचता है कि स्ट्रिंग str कॉमा-अलग सूची csv_list में मौजूद है या नहीं। सूची में स्थिति (1-आधारित) लौटाता है, नहीं मिलने पर 0।
उदाहरण: '8' मान वाली पंक्तियां खोजें
टेबल बनाएं:
CREATE TABLE DemoTable (Values VARCHAR(50));
INSERT INTO DemoTable VALUES ('23,45,78,56'), ('384,476,7456'), ('68,8,88,89'), ('78,80,84');
डेटा:
+--------------+ | Values | +--------------+ | 23,45,78,56 | | 384,476,7456 | | 68,8,88,89 | | 78,80,84 | +--------------+
FIND_IN_SET से खोजें
SELECT * FROM DemoTable WHERE FIND_IN_SET('8', `Values`) != 0;
परिणाम:
+------------+ | Values | +------------+ | 68,8,88,89 | +------------+
व्याख्या
FIND_IN_SET('8', '68,8,88,89')→ 2 (दूसरी स्थिति)!= 0— मिला (स्थिति > 0)'23,45,78,56'में '8' नहीं है (78 है, लेकिन 8 नहीं)
महत्वपूर्ण सीमाएं
- सटीक मिलान: '8' केवल '8' से मेल खाता है, '78', '88', '80' से नहीं
- कोई स्पेस नहीं:
'1, 2, 3'(स्पेस के साथ) काम नहीं करेगा —REPLACE(Values, ' ', '')उपयोग करें - इंडेक्स नहीं: फुल टेबल स्कैन करता है
- NULL: यदि कोई तर्क NULL है तो NULL लौटाता है
बेहतर डिज़ाइन: जंक्शन टेबल
कॉमा-अलग सूची स्टोर करना एंटी-पैटर्न है (पहला सामान्य रूप उल्लंघन)। बेहतर: