对不起,我的英语
我使用此查询从urls中提取域名
SELECT SUBSTRING(LEFT(url, LOCATE('/', url, 8) - 1), 8) AS domain...只有当url类似于www.google.com/某物时,它才有效
它对urls不起作用,比如
www.google.it (不带尾部斜杠)
www.google.it/abc/xzy/ (permalink)
你知道怎么解决这个问题吗?
发布于 2016-05-20 05:45:35
我不得不结合之前的一些答案,并对我的数据集进行了更多的修改。这就是我的工作,它返回域和任何子域:
SUBSTRING_INDEX(SUBSTRING_INDEX(SUBSTRING_INDEX(SUBSTRING_INDEX(target_url, '/', 3), '://', -1), '/', 1), '?', 1) AS domain解释(因为非平凡的SQL很少有意义):
SUBSTRING_INDEX(target_url, '/', 3) -如果url具有协议,则剥离任何路径
SUBSTRING_INDEX(THAT, '://', -1) -从中剥离任何协议
SUBSTRING_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'发布于 2013-08-15 01:07:44
删除www.、anysubdomain和/之后的所有内容:
SUBSTRING_INDEX((SUBSTRING_INDEX((SUBSTRING_INDEX(url, 'http://', -1)), '/', 1)), '.', -2) as domain发布于 2015-11-14 06:09:10
所有的答案似乎对我都不起作用。例如,以?开头变量的url。一些答案失败了。这对我适用于所有类型的URL:
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(REPLACE(REPLACE(LOWER(url), 'https://', ''), 'http://', ''), '/', 1), '?', 1) AS domain;https://stackoverflow.com/questions/9280336
复制相似问题