我到上网搜了很多,http://www.baidu.com,基本上都是些的很死,截取,如果一旦出现 https://www.baidu.com.cn 或者 https://dd.xx.baidu.com.cn/index.php 这样的格式出现,基本上一试一个死,因为老板有需求,所以我们去满足。
自己的一些想法:域名类似于.www.baidu.com 基本上都是最后一个.从.com 开始的,那么就是要找到这个.的位置,但是如果域名是.com.cn 这样的,那么我们要怎么做呢?
首先,.com.cn这种域名后缀是有限的,例如,.com.cn .net.cn org.cn这样的,那么我们就先取之糟粕,留取精华。先去干掉这些,然后在找到最后一个.
www.baidu.com 干掉.com 最后一个点就是.baidu 的这个.了,域名里面是不能带有.的所以就可以利用这个方式来解决。
我先贴代码(sql函数)
ALTER function [dbo].[GetDoMian](@adsurl varchar(max))
Returns Nvarchar(500)
As
begin
Declare @domian real;
Declare @DoMianName Nvarchar(500)
Declare @iscomcn int
Declare @isnetcn int
Declare @isorgcn int
Declare @isgovcn int
Declare @isaccn int
Declare @isdomianlen int
Declare @realm Nvarchar(500)
Declare @S1 varchar(100);
Declare @S2 varchar(100);
Declare @ishttps int;
set @iscomcn=(SELECT PATINDEX('%.com.cn%',@adsurl));
set @isnetcn=(SELECT PATINDEX('%.net.cn%',@adsurl));
set @isorgcn=(SELECT PATINDEX('%.org.cn%',@adsurl));
set @isgovcn=(SELECT PATINDEX('%.gov.cn%',@adsurl));
set @isaccn=(SELECT PATINDEX('%.ac.cn%',@adsurl));
set @ishttps=(SELECT PATINDEX('%https://%',@adsurl));
if(@iscomcn>0 or @isnetcn>0 or @isorgcn>0 or @isgovcn>0 or @isaccn>0)
begin
set @S1=@adsurl;
if(@ishttps>0)
begin
set @S2= STUFF(@S1,CHARINDEX('https://',@S1),Len('https')+3,'' );
end
else
begin
set @S2= STUFF(@S1,CHARINDEX('http://',@S1),Len('http')+3,'' );
end
set @DoMianName= SUBSTRING (@S2,0, PATINDEX('%/%', @S2));
set @DoMianName=replace(replace(replace(replace(replace(@DoMianName,'.com.cn',''),'.net.cn',''),'.org.cn',''),'.gov.cn',''),'.ac.cn','');--将域名后缀替换空
set @isdomianlen= CHARINDEX('.',reverse(@DoMianName))-1;
set @realm= SUBSTRING(@DoMianName,LEN(@DoMianName)-@isdomianlen+1,LEN(@DoMianName));--获取域名后缀
if(@iscomcn>0)
begin
set @DoMianName=@realm+'.com.cn';
end
if(@isnetcn>0)
begin
set @DoMianName=@realm+'.net.cn';
end
if(@isorgcn>0)
begin
set @DoMianName=@realm+'.org.cn';
end
if(@isgovcn>0)
begin
set @DoMianName=@realm+'.gov.cn';
end
if(@isaccn>0)
begin
set @DoMianName=@realm+'.ac.cn';
end
end
else
begin
set @S1=@adsurl;
if(@ishttps>0)
begin
set @S2= STUFF(@S1,CHARINDEX('https://',@S1),Len('https')+3,'' );
end
else
begin
set @S2= STUFF(@S1,CHARINDEX('http://',@S1),Len('http')+3,'' );
end
set @DoMianName= SUBSTRING (@S2,0, PATINDEX('%/%', @S2));
set @isdomianlen= CHARINDEX('.',reverse(@DoMianName))-1;
set @realm= SUBSTRING (@DoMianName,LEN(@DoMianName)-@isdomianlen, LEN(@DoMianName));--获取域名后缀
set @DoMianName=replace(@DoMianName,@realm,'');
set @isdomianlen= CHARINDEX('.',reverse(@DoMianName))-1;
set @DoMianName=SUBSTRING (@DoMianName,LEN(@DoMianName)-@isdomianlen+1, LEN(@DoMianName));--获取域名名称
set @DoMianName=@DoMianName+@realm
end
--insert into test(tvalue)values(@DoMianName)
return @DoMianName;
end