Ada*_*m N 5 sql t-sql sql-server url parsing
我得到了这个答案,但想扩展这个问题,在堆栈上或通过搜索谷歌找不到任何解决方案.
基本上上面的链接用一个简单的URL解决了我的问题,比如使用google解析"www.google.com".
我想要扩展的是上面的链接解决方案没有帮助像只返回地图的"www.maps.google.com"网址.
我想要的是让它从网址'www.maps.google.com'返回'google'或从'www.test.example.com'返回'example'.
如果有人有解决方案,我将非常感激.
更新:更具体地说,我还需要在二级域名等解析'www.maps.google.com.au'以返回'google'
这是我的Sql函数.
CREATE FUNCTION [dbo].[parseURL] (@strURL varchar(1000))
RETURNS varchar(1000)
AS
BEGIN
IF CHARINDEX('.', REPLACE(@strURL, 'www.','')) > 0
SELECT @strURL = LEFT(REPLACE(@strURL, 'www.',''), CHARINDEX('.',REPLACE(@strURL, 'www.',''))-1)
Else
SELECT @strURL = REPLACE(@strURL, 'www.','')
RETURN @strURL
END
Run Code Online (Sandbox Code Playgroud)
我建议这个
DECLARE @URL nvarchar(max) = 'www.maps.google.com'
DECLARE @X xml = CONVERT(xml,'<root><part>' + REPLACE(@URL, '.','</part><part>') + '</part></root>')
SELECT [Domain] = T.c.value('.','varchar(20)')
FROM @X.nodes('/root/part[position() = last() - 1]') T(c)
Run Code Online (Sandbox Code Playgroud)
方法是将URL转换为XML,然后使用XPath查找域.
UPDATE
关于二级域名,我相信唯一可靠的方法是将它们全部放在一个表格中(顶级域名也应该在一个表格中)然后你可以使用这个查询:
DECLARE @URL nvarchar(max) = 'www.maps.google.com'
DECLARE @X xml = CONVERT(xml,'<root><part>' + REPLACE(REVERSE(@URL), '.','</part><part>') + '</part></root>')
;WITH SplitCTE AS
(
SELECT
(SELECT REVERSE(T.c.value('.', 'nvarchar(256)')) FROM @X.nodes('/root/part[. = ../part[position() = 1]]') T(c)) AS TLD,
(SELECT REVERSE(T.c.value('.', 'nvarchar(256)')) FROM @X.nodes('/root/part[. = ../part[position() = 2]]') T(c)) AS D2,
(SELECT REVERSE(T.c.value('.', 'nvarchar(256)')) FROM @X.nodes('/root/part[. = ../part[position() = 3]]') T(c)) AS D3
)
SELECT
CASE
WHEN SLD.Domain IS NULL THEN S.D2 ELSE S.D3
END AS Domain
FROM
SplitCTE AS S
LEFT JOIN TLD ON TLD.Domain = S.TLD
LEFT JOIN SLD ON SLD.Domain = S.D2
Run Code Online (Sandbox Code Playgroud)
我在本例中使用的TLD/SLD表如下.域名的完整列表在此Wiki中.小心使用,NVARCHAR因为一些是本地化的.
CREATE TABLE dbo.TLD
(
Domain nvarchar(10)
)
GO
CREATE TABLE dbo.SLD
(
Domain nvarchar(10)
)
GO
INSERT TLD VALUES ( 'com')
INSERT TLD VALUES ( 'uk')
INSERT SLD VALUES ( 'co')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7843 次 |
| 最近记录: |