我想从URL字段中检索不同的域。这是我的表
url
id url
1 www.goal.com
2 www.goal.com/liverpool
3 www.mirror.com
4 www.mirror.com/i-want-cars
预期结果应为
id domain
1 goal
2 mirror
我该怎么做 - 这是我尝试的,
SELECT DISTINCT (REPLACE(SUBSTRING_INDEX(REPLACE(url, 'www.', ''), '/', 3), 'http://', '')) AS domain,
url
FROM `url_tbl` ORDER BY `id` DESC
对我不起作用。
答案 0 :(得分:0)
根据manual,以下查询:
SELECT SUBSTRING_INDEX('www.mysql.com', '.', 2);
返回:
'www.mysql'
,而:
SELECT SUBSTRING_INDEX('www.mysql', '.', -1)
返回:
'mysql'
因此,如果网址中有总是两个.
,并且在它们之间有域名,那么您可以使用:
SELECT DISTINCT SUBSTRING_INDEX(SUBSTRING_INDEX(url, '.', 2), '.', -1)
FROM url_tbl
答案 1 :(得分:0)
查询已更新,等待您的回复。
注意如果您只想在结果集中使用唯一的domainName
,请从查询中删除, 'url' as 'Real URL'
此部分。第二个图像是所需的输出。
如果您的mysql服务器版本是8,那么试试这个 看到输出图像也希望这能解决你的问题。
select distinct REGEXP_REPLACE( REGEXP_REPLACE(url,'^(https://www\\.|http://www\\.|www\\.|http:\//|https:\//)','') , '(.com)(\/(.*))*' , '') as 'Domain', `url`.`url` as 'Real URL' from url ;
点击此处只是为了明白
没有MYSQL常规快递DEBUGGEX
所以正则表达式只有一点点的转义有轻微变化\。
^(https://www\.|http://www\.|www\.|http:\//|https:\//)