CHAR_LENGTH() और REVERSE() के साथ LOCATE()
MySQL में किसी स्ट्रिंग में **अंतिम सबस्ट्रिंग (अंतिम डिलीमीटर) की स्थिति** खोजने के लिए स्ट्रिंग को उल्टा करें, डिलीमीटर खोजें, और लंबाई से घटाएं।
सिंटैक्स
SELECT CHAR_LENGTH(yourColumnName) - LOCATE('delimiter', REVERSE(yourColumnName)) + 1
AS PositionOfLastSubstring
FROM yourTableName;
तर्क
REVERSE(str)- स्ट्रिंग उल्टा करेंLOCATE(' ', REVERSE(str))- उल्टी स्ट्रिंग में पहला स्पेस (मूल में अंतिम स्पेस) खोजेंCHAR_LENGTH(str) - pos + 1- मूल स्ट्रिंग में स्थिति की गणना करें
व्यावहारिक उदाहरण
1. टेबल बनाएं
mysql> CREATE TABLE SubStringIndexDemo (
-> Words VARCHAR(200)
-> );
Query OK, 0 rows affected (0.57 sec)
mysql> INSERT INTO SubStringIndexDemo VALUES('This is MySQL Query');
mysql> INSERT INTO SubStringIndexDemo VALUES('MySQL is a Relational Database');
mysql> INSERT INTO SubStringIndexDemo VALUES('Java is a programming language');
mysql> INSERT INTO SubStringIndexDemo VALUES('Spring is a Framework');
2. डेटा देखें
mysql> SELECT * FROM SubStringIndexDemo;
+--------------------------------+
| Words |
+--------------------------------+
| This is MySQL Query |
| MySQL is a Relational Database |
| Java is a programming language |
| Spring is a Framework |
+--------------------------------+
4 rows in set (0.00 sec)
3. अंतिम सबस्ट्रिंग (अंतिम शब्द) की स्थिति
mysql> SELECT CHAR_LENGTH(Words) - LOCATE(' ', REVERSE(Words)) + 1
-> AS PositionOfLastSubstring
-> FROM SubStringIndexDemo;
+-------------------------+
| PositionOfLastSubstring |
+-------------------------+
| 14 | -- "Query" 14वें स्थान से शुरू
| 22 | -- "Database" 22वें स्थान से
| 22 | -- "language" 22वें स्थान से
| 12 | -- "Framework" 12वें स्थान से
+-------------------------+
4 rows in set (0.00 sec)
सत्यापन
-- "This is MySQL Query" लंबाई 19, अंतिम स्पेस स्थान 13, अगला 14 = "Query"
SELECT SUBSTRING('This is MySQL Query', 14); -- 'Query'
सामान्यीकृत फ़ंक्शन (MySQL 8.0+)
CREATE FUNCTION LastDelimiterPos(str TEXT, delim VARCHAR(10))
RETURNS INT
DETERMINISTIC
RETURN CHAR_LENGTH(str) - LOCATE(delim, REVERSE(str)) + 1;
वैकल्पिक: SUBSTRING_INDEX (अंतिम भाग प्राप्त करने के लिए)
SELECT SUBSTRING_INDEX(Words, ' ', -1) AS LastWord
FROM SubStringIndexDemo;
+-----------+
| LastWord |
+-----------+
| Query |
| Database |
| language |
| Framework |
+-----------+
यह **स्थिति नहीं**, **मान** देता है। अक्सर यही चाहिए होता है।
चेतावनी
- डिलीमीटर न मिलने पर
LOCATE0 लौटाता है → स्थिति = लंबाई + 1 (गलत) - सुरक्षित संस्करण:
IF(LOCATE(...)>0, CHAR_LENGTH(...) - LOCATE(...) + 1, 1) - बहु-कैरेक्टर डिलीमीटर के लिए
LOCATEकाम करता है