对不起我的英语不好
我有这个查询从网址中提取域名
SELECT SUBSTRING(LEFT(url, LOCATE('/', url, 8) - 1), 8) AS domain...
Run Code Online (Sandbox Code Playgroud)
它只适用于网址www.google.com/something
它不适用于网址
www.google.it(不带斜线)
www.google.it/abc/xzy/(永久链接)
你知道怎么解决吗?
Los*_*311 34
我必须结合以前的一些答案,再加上我的数据集更多的hackery.这对我有用,它返回域和任何子域:
SUBSTRING_INDEX(SUBSTRING_INDEX(SUBSTRING_INDEX(SUBSTRING_INDEX(target_url, '/', 3), '://', -1), '/', 1), '?', 1) AS domain
Run Code Online (Sandbox Code Playgroud)
解释(导致非平凡的SQL很少有意义):
SUBSTRING_INDEX(target_url, '/', 3)- 如果url有
SUBSTRING_INDEX(THAT, '://', -1)协议,则
SUBSTRING_INDEX(THAT, '/', 1)剥离任何路径 - 从THAT剥离任何协议 - 从THAT 剥离任何路径(如果没有协议)
SUBSTRING_INDEX(THAT, '?', 1)- 从THAT剥离查询字符串(如果没有路径或尾随/)
测试用例:
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;
Run Code Online (Sandbox Code Playgroud)
结果:
'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'
Run Code Online (Sandbox Code Playgroud)
evi*_*e84 16
删除www.,anysubdomain以及/之后的所有内容:
SUBSTRING_INDEX((SUBSTRING_INDEX((SUBSTRING_INDEX(url, 'http://', -1)), '/', 1)), '.', -2) as domain
Run Code Online (Sandbox Code Playgroud)
如果你想删除 www. 连同来自您域的 http://、https:// 和 /(path),请执行以下操作:
SUBSTRING_INDEX(SUBSTRING_INDEX(SUBSTRING_INDEX(SUBSTRING_INDEX(SUBSTRING_INDEX(document_url, '/', 3), '://', -1), '/', 1), '?', 1),'www.',-1)
Run Code Online (Sandbox Code Playgroud)
如果你想找到第一次出现的情况,/为什么你要传递 8LOCATE作为起始位置?(我假设在协议后面跳过斜杠,例如 http://,但如果您也希望 url 没有协议,请考虑使用 cnn.com/page 等短斜杠)
IF(LOCATE('/', url) > 0, SUBSTRING(url, 1, LOCATE('/', url) - 1), url) AS domain
Run Code Online (Sandbox Code Playgroud)
或者:
SUBSTRING_INDEX(url, '/', 1) AS domain
Run Code Online (Sandbox Code Playgroud)
后者对我来说似乎更容易。
| 归档时间: |
|
| 查看次数: |
21364 次 |
| 最近记录: |