MySQL में SUBSTRING_INDEX() और INSTR() से ईमेल का डोमेन भाग (@ के बाद, डॉट से पहले) प्राप्त करना
सिंटैक्स:
SELECT SUBSTRING_INDEX(SUBSTR(email, INSTR(email, '@') + 1), '.', 1) AS DomainName
FROM yourTableName;
चरण-दर-चरण विश्लेषण:
INSTR(email, '@') → '@' की स्थिति खोजें
+ 1 → '@' के बाद का भाग शुरू करें
SUBSTR(email, pos) → '@' के बाद का सबस्ट्रिंग (डोमेन + TLD)
SUBSTRING_INDEX(..., '.', 1) → पहले डॉट से पहले का भाग (डोमेन नाम)
व्यावहारिक उदाहरण
1. टेबल बनाएं:
mysql> CREATE TABLE selectDomainNameOnly (UserEmailAddress VARCHAR(200));
Query OK, 0 rows affected (0.52 sec)
2. ईमेल डालें:
mysql> INSERT INTO selectDomainNameOnly VALUES('John123@yahoo.com');
mysql> INSERT INTO selectDomainNameOnly VALUES('234Bob@gmail.com');
mysql> INSERT INTO selectDomainNameOnly VALUES('Carol23595@hotmail.com');
3. सभी रिकॉर्ड:
+------------------------+
| UserEmailAddress |
+------------------------+
| John123@yahoo.com |
| 234Bob@gmail.com |
| Carol23595@hotmail.com |
+------------------------+
3 rows in set (0.00 sec)
4. डोमेन नाम निकालें:
mysql> SELECT SUBSTRING_INDEX(SUBSTR(UserEmailAddress, INSTR(UserEmailAddress, '@') + 1), '.', 1) AS DomainName
-> FROM selectDomainNameOnly;
+------------+
| DomainName |
+------------+
| yahoo |
| gmail |
| hotmail |
+------------+
3 rows in set (0.06 sec)
सरल विकल्प (MySQL 8.0+):
-- SUBSTRING_INDEX का दोहरा उपयोग
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(email, '@', -1), '.', 1) AS domain FROM table;
पूरा डोमेन (TLD सहित):
SELECT SUBSTRING_INDEX(email, '@', -1) AS full_domain FROM table;
yahoo.com
gmail.com
hotmail.com
उन्नत: उप-डोमेन संभालना (mail.google.com → google):
SELECT
SUBSTRING_INDEX(SUBSTRING_INDEX(email, '@', -1), '.', -2) AS main_domain
FROM table;
संबंधित स्ट्रिंग फंक्शन:
| फंक्शन | उपयोग |
SUBSTRING_INDEX(str, delim, count) | डेलिमीटर के count-वें घटना से पहले/बाद का भाग |
INSTR(str, substr) | सबस्ट्रिंग की पहली स्थिति (1-आधारित) |
LOCATE(substr, str) | INSTR जैसा लेकिन पैरामीटर क्रम अलग |
SUBSTR(str, pos, len) | स्थिति से लंबाई तक सबस्ट्रिंग |