Sql server 2008 如何在SQL Server中创建函数
请帮助我,如何使用函数过滤SQL中的单词 我很难解释,所以我举个例子:Sql server 2008 如何在SQL Server中创建函数,sql-server-2008,Sql Server 2008,请帮助我,如何使用函数过滤SQL中的单词 我很难解释,所以我举个例子: ID | WebsiteName | ----------------------------------- 1 | www.yahoo.com | 2 | www.google.com | 3 | www.youtube.com | 我想要的是,如何获得网站的名称。我想选择这样输出的记录。如何删除记
ID | WebsiteName |
-----------------------------------
1 | www.yahoo.com |
2 | www.google.com |
3 | www.youtube.com |
我想要的是,如何获得网站的名称。我想选择这样输出的记录。如何删除记录中的“www.”和“.com”
ID | WebsiteName
--------------------------
1 | yahoo
谢谢你的帮助这个怎么样
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
为了避免哈姆雷特·哈科比扬(Hamlet Hakobyan)提到的bug,您可以使用stuff代替replace
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
这将适用于大多数网站名称:
从dbo.YourTable中选择ID,REVERSE(PARSENAME(REVERSE(WebsiteName),2))。
您没有充分解释。是否仅在选择期间执行此操作,还是作为计算列执行此操作?您是否希望仅提取一个级别的域名(您希望www.example.co.uk
如何处理?)?您可以使用STUFF
和CHARINDEX
如下所示:SET@Work=STUFF(@Work,CHARINDEX('www.,@Work),LEN('www.),'')