मुझे पिछले कुछ उत्तरों को मिलाना था, साथ ही मेरे डेटा सेट के लिए थोड़ी और हैकरी भी। यह वही है जो मेरे लिए काम करता है, यह डोमेन और किसी भी उप-डोमेन को लौटाता है:
SUBSTRING_INDEX(SUBSTRING_INDEX(SUBSTRING_INDEX(SUBSTRING_INDEX(target_url, '/', 3), '://', -1), '/', 1), '?', 1) AS domain
स्पष्टीकरण (गैर-तुच्छ एसक्यूएल शायद ही कभी समझ में आता है):
SUBSTRING_INDEX(target_url, '/', 3)
- यदि url में प्रोटोकॉल है तो किसी भी पथ को हटा देता हैSUBSTRING_INDEX(THAT, '://', -1)
- THATSUBSTRING_INDEX(THAT, '/', 1)
से किसी भी प्रोटोकॉल को हटा देता है - उस से किसी भी पथ को हटा देता है (यदि कोई प्रोटोकॉल नहीं था)SUBSTRING_INDEX(THAT, '?', 1)
- क्वेरी स्ट्रिंग को उस से हटा देता है (यदि कोई पथ या अनुगामी / नहीं था)
परीक्षण के मामले:
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(SUBSTRING_INDEX(SUBSTRING_INDEX(target_url, '/', 3), '://', -1), '/', 1), '?', 1) AS domain
FROM (
SELECT 'http://test.com' as target_url
UNION SELECT 'https://test.com'
UNION SELECT 'http://test.com/one'
UNION SELECT 'http://test.com/?huh'
UNION SELECT 'http://test.com?http://ouch.foo'
UNION SELECT 'test.com'
UNION SELECT 'test.com/one'
UNION SELECT 'test.com/one/two'
UNION SELECT 'test.com/one/two/three'
UNION SELECT 'test.com/one/two/three?u=http://maaaaannn'
UNION SELECT 'http://one.test.com'
UNION SELECT 'one.test.com/one'
UNION SELECT 'two.one.test.com/one' ) AS Test;
परिणाम:
'test.com'
'test.com'
'test.com'
'test.com'
'test.com'
'test.com'
'test.com'
'test.com'
'test.com'
'test.com'
'one.test.com'
'one.test.com'
'two.one.test.com'