SQL语句通过网址获取主域名方法

我到上网搜了很多,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


可以根据自己的需求进行修改,写的不太好,大佬们别喷,求指导。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值