Sql server 2008 如何在SQL Server中创建函数

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 | 我想要的是,如何获得网站的名称。我想选择这样输出的记录。如何删除记

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

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

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.),'')