Created
April 4, 2017 04:38
-
-
Save radimih/f63e38da771b38d7dd586633402134fd to your computer and use it in GitHub Desktop.
MySQL: функция получения доменного имени из URL
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
DROP FUNCTION IF EXISTS squid_log.get_domain; | |
CREATE FUNCTION `get_domain`(url TEXT, level SMALLINT) | |
RETURNS VARCHAR(100) | |
DETERMINISTIC | |
COMMENT 'Получить доменное имя из URL' | |
BEGIN | |
/******************************************************************************* | |
* Получить доменное имя из URL | |
* ---------------------------- | |
* Дополнительно из доменного имени удаляется поддомен www и все его поддомены. | |
* | |
* Параметры: | |
* url - URL | |
* level - Возвращаемое количество доменов верхнего уровня. | |
* Без учета домена www. Не распространяется на IP-адреса. | |
* | |
* Возврат: | |
* domain - доменное имя, состоящее из поддоменов не более указанного | |
* количества поддоменов верхнего уровня | |
*******************************************************************************/ | |
declare domain varchar(250); | |
# Вытащить из URL полное доменное имя и убрать www | |
set domain = substring_index( | |
substring_index( | |
substring_index( | |
substring_index( | |
substring_index( | |
substring_index( | |
url, '/', 3), /* убрать путь в случае, когда в url указан протокол) */ | |
'://', -1), /* убрать протокол */ | |
'/', 1), /* убрать путь в случае, когда в url не был указан протокол */ | |
'?', 1), /* убрать знак вопроса, если сразу после домена он указан */ | |
':', 1), /* убрать номер порта */ | |
'www.', -1); /* убрать поддомен www и его поддомены */ | |
# Если доменное имя не является IP-адресом | |
if domain not regexp '^([0-9]{1,3}\.){3}[0-9]{1,3}$' | |
then | |
# Оставить только несколько поддоменов верхнего уровня | |
set domain = substring_index(domain, '.', -level); | |
end if; | |
return domain; | |
END; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment