Original post: http://anothermysqldba.blogspot.com/2014/12/findparse-string-from-within-string.html
तो मैंने हाल ही में एक और स्ट्रिंग के बाहर एक स्ट्रिंग पार्स करने के बारे में कुछ अलग सवाल और पदों देखा। कुछ समाधान आदि नए कार्य और बनाने शामिल है, जबकि यह भी है कि कुछ मामलों में एक ही प्रश्न के भीतर किया जा सकता है।
उदाहरण के लिए, हमें हम एक यूआरएल से डोमेन बाहर खींचने के लिए देख रहे हैं कि हम कहते हैं। मैं करने के लिए क्यों और कैसे यह काम करता है के रूप में विस्तार में जाने की कोशिश करेंगे।
हम निम्न तालिका है।
कॉम के बाद // और कुछ भी: // या https: इस उदाहरण के लिए लक्ष्य HTTP उपेक्षा करने के लिए है। इसलिए हम स्थानों को खोजने के लिए खोजें उपयोग करें।
कॉम संदर्भ हम उस के साथ शुरू कर सकते हैं इतना है कि स्थिर है के बाद से आसान है।
ठीक है तो हम / निकालना चाहते हैं, कि क्या स्थान है?
यह मैं ही पालन करने के लिए परिणामों को आसान बनाने के लिए क्षेत्र उपनाम रखा है, हमें हमारे अंत की स्थिति देता है।
उन्हें बाद //, तो हम सिर्फ स्ट्रिंग में / दूसरे के स्थान की जरूरत: अब HTTP और HTTPS के बाद बाहर छँटाई बहुत आसान के रूप में अच्छी तरह से वे दोनों के रूप में वास्तव में है।
इन प्रश्नों सिर्फ अंतिम क्वेरी के विभिन्न पहलुओं कर रही हो जाएगा क्या दिखा रहे हैं। इसलिए हमें यह सब एक साथ डाल दिया।
अब उम्मीद है कि आप की जरूरत है जो कुछ भी बाहर पार्स करने में सक्षम हो मदद करता है। यह उदाहरण एक यूआरएल तक सीमित है। लेकिन कार्य के कुछ उदाहरण के बाद से पहले से ही यहाँ आप की जरूरत है जो कुछ पार्स करने के लिए उपयोग कर सकते हैं कि एक समारोह के मेरे उदाहरण है।
एक पूरा नाम क्षेत्र से एक अंतिम नाम खींचो:
पहला नाम खींचो
नाम उदाहरणों के साथ दी जाती है कि आप सीमांकक मूल्यों को पता करने की आवश्यकता होगी। लेकिन यह आप पर निर्माण कर सकते हैं सिर्फ एक उदाहरण है।
उदाहरण के लिए, हमें हम एक यूआरएल से डोमेन बाहर खींचने के लिए देख रहे हैं कि हम कहते हैं। मैं करने के लिए क्यों और कैसे यह काम करता है के रूप में विस्तार में जाने की कोशिश करेंगे।
हम निम्न तालिका है।
CREATE TABLE `parse_example` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`urldemo` varchar(150) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB;
+----+----------------------------+
| id | urldemo |
+----+----------------------------+
| 1 | http://www.mysql.com/ |
| 2 | http://www.percona.com/ |
| 3 | https://tools.percona.com/ |
| 4 | https://mariadb.com/ |
| 5 | http://planet.mysql.com/ |
| 6 | http://dev.mysql.com/doc/ |
+----+----------------------------+
कॉम के बाद // और कुछ भी: // या https: इस उदाहरण के लिए लक्ष्य HTTP उपेक्षा करने के लिए है। इसलिए हम स्थानों को खोजने के लिए खोजें उपयोग करें।
कॉम संदर्भ हम उस के साथ शुरू कर सकते हैं इतना है कि स्थिर है के बाद से आसान है।
SELECT LOCATE('.com', urldemo), urldemo FROM parse_example;
+-------------------------+----------------------------+
| LOCATE('.com', urldemo) | urldemo |
+-------------------------+----------------------------+
| 17 | http://www.mysql.com/ |
| 19 | http://www.percona.com/ |
| 22 | https://tools.percona.com/ |
| 16 | https://mariadb.com/ |
| 20 | http://planet.mysql.com/ |
| 17 | http://dev.mysql.com/doc/ |
+-------------------------+----------------------------+
ठीक है तो हम / निकालना चाहते हैं, कि क्या स्थान है?
SELECT LOCATE('.com', urldemo) as start, LOCATE('.com', urldemo) +4 as end, SUBSTRING(urldemo FROM LOCATE('.com', urldemo) + 4 ) AS resulting , urldemo FROM parse_example;
+-------+-----+-----------+----------------------------+
| start | end | resulting | urldemo |
+-------+-----+-----------+----------------------------+
| 17 | 21 | / | http://www.mysql.com/ |
| 19 | 23 | / | http://www.percona.com/ |
| 22 | 26 | / | https://tools.percona.com/ |
| 16 | 20 | / | https://mariadb.com/ |
| 20 | 24 | / | http://planet.mysql.com/ |
| 17 | 21 | /doc/ | http://dev.mysql.com/doc/ |
+-------+-----+-----------+----------------------------+
यह मैं ही पालन करने के लिए परिणामों को आसान बनाने के लिए क्षेत्र उपनाम रखा है, हमें हमारे अंत की स्थिति देता है।
उन्हें बाद //, तो हम सिर्फ स्ट्रिंग में / दूसरे के स्थान की जरूरत: अब HTTP और HTTPS के बाद बाहर छँटाई बहुत आसान के रूप में अच्छी तरह से वे दोनों के रूप में वास्तव में है।
SELECT LOCATE('/', urldemo) as first, LOCATE('/', urldemo) +1 as second, urldemo
FROM parse_example;
+-------+--------+----------------------------+
| first | second | urldemo |
+-------+--------+----------------------------+
| 6 | 7 | http://www.mysql.com/ |
| 6 | 7 | http://www.percona.com/ |
| 7 | 8 | https://tools.percona.com/ |
| 7 | 8 | https://mariadb.com/ |
| 6 | 7 | http://planet.mysql.com/ |
| 6 | 7 | http://dev.mysql.com/doc/ |
+-------+--------+----------------------------+
इन प्रश्नों सिर्फ अंतिम क्वेरी के विभिन्न पहलुओं कर रही हो जाएगा क्या दिखा रहे हैं। इसलिए हमें यह सब एक साथ डाल दिया।
SELECT
TRIM(TRAILING SUBSTRING(urldemo FROM LOCATE('.com', urldemo) + 4 )
FROM SUBSTRING(urldemo FROM LOCATE('/', urldemo) + 2 ) ) AS parsed_domain ,
urldemo as original_url
FROM parse_example;
+-------------------+----------------------------+
| parsed_domain | original_url |
+-------------------+----------------------------+
| www.mysql.com | http://www.mysql.com/ |
| www.percona.com | http://www.percona.com/ |
| tools.percona.com | https://tools.percona.com/ |
| mariadb.com | https://mariadb.com/ |
| planet.mysql.com | http://planet.mysql.com/ |
| dev.mysql.com | http://dev.mysql.com/doc/ |
+-------------------+----------------------------+
अब उम्मीद है कि आप की जरूरत है जो कुछ भी बाहर पार्स करने में सक्षम हो मदद करता है। यह उदाहरण एक यूआरएल तक सीमित है। लेकिन कार्य के कुछ उदाहरण के बाद से पहले से ही यहाँ आप की जरूरत है जो कुछ पार्स करने के लिए उपयोग कर सकते हैं कि एक समारोह के मेरे उदाहरण है।
CREATE FUNCTION PARSE_STRING(delimiterA VARCHAR(50), delimiterB VARCHAR(50), passed_string VARCHAR(255) )
RETURNS VARCHAR(255) DETERMINISTIC
RETURN
TRIM(TRAILING SUBSTRING(passed_string FROM LOCATE(delimiterB, passed_string) )
FROM SUBSTRING(passed_string FROM LOCATE(delimiterA, passed_string) + CHAR_LENGTH(delimiterA) ) ) ;
SELECT PARSE_STRING('//','.com', urldemo) FROM parse_example;
+------------------------------------+
| PARSE_STRING('//','.com', urldemo) |
+------------------------------------+
| www.mysql |
| www.percona |
| tools.percona |
| mariadb |
| planet.mysql |
| dev.mysql |
+------------------------------------+
एक पूरा नाम क्षेत्र से एक अंतिम नाम खींचो:
SELECT PARSE_STRING('John ','', 'John Smith') ;
+----------------------------------------+
| PARSE_STRING('John ','', 'John Smith') |
+----------------------------------------+
| Smith |
+----------------------------------------+
पहला नाम खींचो
SELECT PARSE_STRING('',' Smith', 'John Smith') ;
+-----------------------------------------+
| PARSE_STRING('',' Smith', 'John Smith') |
+-----------------------------------------+
| John |
+-----------------------------------------+
नाम उदाहरणों के साथ दी जाती है कि आप सीमांकक मूल्यों को पता करने की आवश्यकता होगी। लेकिन यह आप पर निर्माण कर सकते हैं सिर्फ एक उदाहरण है।