我必须在 sql 中将网站名称修剪为“.com”或“co.in”
示例:假设我的站点地址为“http://stackoverflow.com/questions/ask?title=trim”。我需要得到“stackoverflow.com”的结果。
在某些情况下它可能像“www.google.co.in”然后我需要它是“google.co.in”
我必须在 sql 中将网站名称修剪为“.com”或“co.in”
示例:假设我的站点地址为“http://stackoverflow.com/questions/ask?title=trim”。我需要得到“stackoverflow.com”的结果。
在某些情况下它可能像“www.google.co.in”然后我需要它是“google.co.in”
请使用以下 SQL 代码提取域名:
DECLARE @WebUrl VARCHAR(35);
SET @WebUrl = 'http://stackoverflow.com/questions/ask?title=trim'
SELECT @WebUrl AS 'WebsiteURL',
LEFT(SUBSTRING(@WebUrl,
(CASE WHEN CHARINDEX('//',@WebUrl)=0
THEN 5
ELSE CHARINDEX('//',@WebUrl) + 2
END), 35),
(CASE
WHEN CHARINDEX('/', SUBSTRING(@WebUrl, CHARINDEX('//', @WebUrl) + 2, 35))=0
THEN LEN(@WebUrl)
else CHARINDEX('/', SUBSTRING(@WebUrl, CHARINDEX('//', @WebUrl) + 2, 35))- 1
END)
) AS 'Domain';
我发现这里可能会有很多变化,尤其是在针对推荐人表运行时。出于这个原因,我创建了一个SQL 脚本,它从一个 Web 地址获取主机名,该地址也涵盖了我发现的所有边缘情况。
DECLARE @WebAddress varchar(300) = 'https://www.stevefenton.co.uk/2015/09/select-the-host-name-from-a-string-in-sql/'
SELECT
/* Get just the host name from a URL */
SUBSTRING(@WebAddress,
/* Starting Position (After any '//') */
(CASE WHEN CHARINDEX('//', @WebAddress)= 0 THEN 1 ELSE CHARINDEX('//', @WebAddress) + 2 END),
/* Length (ending on first '/' or on a '?') */
CASE
WHEN CHARINDEX('/', @WebAddress, CHARINDEX('//', @WebAddress) + 2) > 0 THEN CHARINDEX('/', @WebAddress, CHARINDEX('//', @WebAddress) + 2) - (CASE WHEN CHARINDEX('//', @WebAddress)= 0 THEN 1 ELSE CHARINDEX('//', @WebAddress) + 2 END)
WHEN CHARINDEX('?', @WebAddress, CHARINDEX('//', @WebAddress) + 2) > 0 THEN CHARINDEX('?', @WebAddress, CHARINDEX('//', @WebAddress) + 2) - (CASE WHEN CHARINDEX('//', @WebAddress)= 0 THEN 1 ELSE CHARINDEX('//', @WebAddress) + 2 END)
ELSE LEN(@WebAddress)
END
) AS 'HostName'
这将处理...
www.
(即无方案)//
/
这对我有用:
SELECT
`url` ,
LEFT(
RIGHT(
`url` ,
length(`url`) -(position('//' IN `url`) + 1)
) ,
position(
'/' IN RIGHT(
`url` ,
length(`url`) -(position('//' IN `url`) + 1)
)
) - 1
) AS domain
FROM
`test`;
使用 SQLCLR 函数并利用System.Uri
该类。
我知道这是一个旧线程,但我最近试图这样做,这里的答案以太没有涵盖http/s
以新 gTLD 开头的字符串。所以这就是我想出的使用 CTE 表达式来尽量保持它的可读性和可理解性。
希望它会帮助任何人在未来偶然发现这个线程!
DECLARE @Var NVARCHAR(1000)
SET @Var='http://stackoverflow.com/questions/ask?title=trim';
WITH cteWithoutWWW (Domain)
as
(
SELECT
case when PATINDEX('%www.%', @Var) > 0 then
SUBSTRING(@Var, PATINDEX('%www.%', @Var) + 4, LEN(@Var) - PATINDEX('%www.%', @Var))
else
@Var
end
),
cteWithoutHTTP (Domain)
as
(
select
case when PATINDEX('http://%', Domain) > 0 then
SUBSTRING(Domain, PATINDEX('http://%', Domain) + 7, LEN(Domain) - PATINDEX('http://%', Domain))
else
Domain
end
from cteWithoutWWW
),
cteWithoutSlash (Domain)
as
(
select
case when CHARINDEX('/', Domain) > 0 then
SUBSTRING(Domain, 0, CHARINDEX('/', Domain))
else
Domain
end
from cteWithoutHTTP
)
select Domain from cteWithoutSlash
这个怎么样:
DECLARE @Var NVARCHAR(1000)
SET @Var='http://stackoverflow.com/questions/ask?title=trim'
SET @Var=REPLACE(@Var,'http://','')
IF(LEFT(@Var,4)='www.')
SET @Var=RIGHT(@Var, len(@Var)-4)
IF(PATINDEX('%.com%', @Var)<>0)
SELECT SUBSTRING(@Var,0, PATINDEX('%.com%', @Var)+4)
ELSE IF (PATINDEX('%.co.%', @Var)<>0)
SELECT SUBSTRING(@Var,0, PATINDEX('%.co.%', @Var)+6)
我构建了这个函数来做到这一点
ALTER FUNCTION fnHostName
(
@URL varchar(4000)
)
RETURNS varchar(4000)
AS
BEGIN
declare @Dot int
declare @Slash int
set @Dot = CHARINDEX('.', @URL)
set @Slash = CHARINDEX('/', @URL)
WHILE @Slash > 0 AND @Slash < @Dot
BEGIN
SET @URL = SUBSTRING(@URL,@Slash+1, LEN(@URL))
set @Dot = CHARINDEX('.', @URL)
set @Slash = CHARINDEX('/', @URL)
END
IF @Slash > 0
BEGIN
SET @URL = LEFT(@URL, @Slash-1)
END
RETURN @URL
END
GO
这是代码,使用子字符串。它适用于 .com 和 .co.in
DECLARE @string VARCHAR(50), @ind int = 0
SET @string = 'http://stackoverflow.co.in/questions/ask?title=trim'
SET @ind= charindex('.com', @string)
IF @ind = 0
BEGIN
SET @ind= charindex('.co.in', @string)
Print SUBSTRING ( @string ,0 , @ind+6 )
END
ELSE
BEGIN
Print SUBSTRING ( @string ,0 , @ind +4)
END