MySQL BETWEEN के साथ स्ट्रिंग रेंज फ़िल्टरिंग
MySQL का BETWEEN ऑपरेटर संख्याओं और दिनांकों के अलावा स्ट्रिंग्स पर भी काम करता है, वर्ण क्रम (कोलेशन के आधार पर) का उपयोग करके। यह कोड, पहचानकर्ता या श्रेणियों के लिए रेंज फ़िल्टरिंग के लिए उपयोगी है।
उदाहरण: कर्मचारी कोड रेंज
mysql> CREATE TABLE DemoTable1473 (
-> EmployeeCode VARCHAR(20)
-> );
Query OK, 0 rows affected (0.47 sec)
mysql> INSERT INTO DemoTable1473 VALUES
-> ('EMP_120'), ('EMP_125'), ('EMP_30'), ('EMP_130');
Query OK, 4 rows affected (0.25 sec)
mysql> SELECT * FROM DemoTable1473;
+--------------+
| EmployeeCode |
+--------------+
| EMP_120 |
| EMP_125 |
| EMP_30 |
| EMP_130 |
+--------------+
4 rows in set (0.00 sec)
स्ट्रिंग BETWEEN क्वेरी
mysql> SELECT * FROM DemoTable1473
-> WHERE EmployeeCode BETWEEN 'EMP_124' AND 'EMP_129';
परिणाम
+--------------+ | EmployeeCode | +--------------+ | EMP_125 | +--------------+ 1 row in set (0.00 sec)
स्ट्रिंग तुलना कैसे काम करती है
- वर्ण-दर-वर्ण तुलना (बाएं से दाएं)
- 'EMP_124' बनाम 'EMP_125': 'E'='E', 'M'='M', 'P'='P', '_'='_', '1'='1', '2'='2', '4'<'5' → EMP_124 < EMP_125
- 'EMP_30' बनाम 'EMP_124': 'E'='E'... '3' > '1' → EMP_30 > EMP_124 (लेक्सिकोग्राफिकली)
महत्वपूर्ण: लेक्सिकोग्राफिक बनाम संख्यात्मक क्रम
| स्ट्रिंग | लेक्सिकोग्राफिक क्रम | संख्यात्मक भाग |
|---|---|---|
| EMP_30 | EMP_124 के बाद | 30 |
| EMP_120 | EMP_124 के पहले | 120 |
| EMP_125 | सीमा में | 125 |
| EMP_130 | EMP_129 के बाद | 130 |
सही संख्यात्मक रेंज के लिए
-- संख्यात्मक भाग निकालें SELECT * FROM DemoTable1473 WHERE CAST(SUBSTRING(EmployeeCode, 5) AS UNSIGNED) BETWEEN 124 AND 129; -- या पैटर्न मिलान SELECT * FROM DemoTable1473 WHERE EmployeeCode REGEXP '^EMP_(12[4-9]|1[3-9][0-9])$';
सर्वोत्तम अभ्यास
- रेंज क्वेरी के लिए संख्यात्मक डेटा को संख्यात्मक कॉलम में संग्रहीत करें
- यदि स्ट्रिंग आवश्यक है, तो निश्चित-चौड़ाई पैडिंग का उपयोग करें: 'EMP_030', 'EMP_120'
- स्ट्रिंग BETWEEN के लिए कॉलेशन नियमों से अवगत रहें