从url中选择不同的域

bvhaajcl  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(259)

我想从url字段检索不同的域。这是我的table

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

不适合我。

afdcj2ne

afdcj2ne1#

根据手册,以下查询:

SELECT SUBSTRING_INDEX('www.mysql.com', '.', 2);

退货:

'www.mysql'

鉴于:

SELECT SUBSTRING_INDEX('www.mysql', '.', -1)

退货:

'mysql'

所以,如果总是有两个 . 在url内部,域名在它们之间,然后您可以使用:

SELECT DISTINCT SUBSTRING_INDEX(SUBSTRING_INDEX(url, '.', 2), '.', -1)
FROM url_tbl

此处演示

zu0ti5jz

zu0ti5jz2#

查询已更新,等待您的响应。
手动链接
注意如果你只想要唯一的 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 ;



你也可以来这里看看
上没有用于常规express的mysql DEBUGGEX 所以正则表达式在单点转义上有细微的变化。

^(https://www\.|http://www\.|www\.|http:\//|https:\//)


debuggex演示

相关问题