如何在 SQLServer 中创建函数

请帮助我,如何使用函数过滤 SQL 中的单词?

我很难解释,所以我举个例子:

ID       |       WebsiteName      |
-----------------------------------
1        |      www.yahoo.com     |
2        |      www.google.com    |
3        |      www.youtube.com   |

我想要的是,如何得到网站的名称。我想选择输出如下的记录。如何删除“ www”。和“ .com”的记录。

ID      |      WebsiteName
--------------------------
1       |        yahoo

谢谢你的帮助

374557 次浏览

这个怎么样?

CREATE FUNCTION dbo.StripWWWandCom (@input VARCHAR(250))
RETURNS VARCHAR(250)
AS BEGIN
DECLARE @Work VARCHAR(250)


SET @Work = @Input


SET @Work = REPLACE(@Work, 'www.', '')
SET @Work = REPLACE(@Work, '.com', '')


RETURN @work
END

然后使用:

SELECT ID, dbo.StripWWWandCom (WebsiteName)
FROM dbo.YourTable .....

当然,这是 严重受限,因为它只会在开始时剥离 www.,在结束时剥离 .com,没有其他东西(所以它不会在其他主机名称,如 smtp.yahoo.com和其他互联网域名,如 .org.edu.de等)

我可以给一个小黑客,你可以使用 T-SQL 函数。尝试这个:

SELECT ID, PARSENAME(WebsiteName, 2)
FROM dbo.YourTable .....

这一个得到的一切之间的“角色。请注意,这不适用于更复杂的 URL,如“ www.somesite.co.uk”字符并相应地选择子字符串。

CREATE FUNCTION dbo.GetURL (@URL VARCHAR(250))
RETURNS VARCHAR(250)
AS BEGIN
DECLARE @Work VARCHAR(250)


SET @Work = @URL


SET @Work = SUBSTRING(@work, CHARINDEX('.', @work) + 1, LEN(@work))
SET @Work = SUBSTRING(@work, 0, CHARINDEX('.', @work))


--Alternate:
--SET @Work = SUBSTRING(@work, CHARINDEX('.', @work) + 1, CHARINDEX('.', @work) + 1)


RETURN @work
END

你可以使用替代品来避免哈姆雷特 · 哈科比安提到的 bug

CREATE FUNCTION dbo.StripWWWandCom (@input VARCHAR(250))
RETURNS VARCHAR(250)
AS BEGIN
DECLARE @Work VARCHAR(250)
SET @Work = @Input


--SET @Work = REPLACE(@Work, 'www.', '')
SET @Work = Stuff(@Work,1,4, '')
SET @Work = REPLACE(@Work, '.com', '')


RETURN @work
END

这将适用于大多数网站名称:

SELECT ID, REVERSE(PARSENAME(REVERSE(WebsiteName), 2)) FROM dbo.YourTable .....