Skip to content

Instantly share code, notes, and snippets.

@radimih
Created April 4, 2017 04:38
Show Gist options
  • Save radimih/f63e38da771b38d7dd586633402134fd to your computer and use it in GitHub Desktop.
Save radimih/f63e38da771b38d7dd586633402134fd to your computer and use it in GitHub Desktop.
MySQL: функция получения доменного имени из URL
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