如何在SQL Server中创建函数


72

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

如果我解释的话,我很难过,所以我举个例子:

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

我想要的是如何获取网站名称。我想选择带有这样的输出的记录。如何删除“ www。” 和记录中的“ .com”。

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

谢谢您的帮助。:D


3
您没有充分解释。您是否只想在SELECT或计算列中执行此操作?您是否只想提取一个域名(您希望如何www.example.co.uk处理?)?
Damien_The_Unbeliever

Answers:


122

这个怎么样?

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等)


2
您可以使用STUFFCHARINDEX这样的: SET @Work = STUFF(@Work, CHARINDEX('www.', @Work), LEN('www.'), '')
Winnifred

13

这一个介于“。”之间的所有内容。字符。请注意,这不适用于更复杂的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


5

您可以使用替代品来避免Hamlet Hakobyan提到的错误

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

1

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.