SQL Serverで関数を作成する方法

関数を使って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 などの他のインターネットドメインでは動作しません)。

解説 (2)

これは、"." 文字の間のすべてを取得します。 www.somesite.co.uk"のような複雑なURLでは動作しませんのでご注意ください。 理想的には、この関数は"."の文字がいくつあるかをチェックし、それに応じて部分文字列を選択します。

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
解説 (0)

T-SQLの関数を使えば、ちょっとしたハックができます。これを試してみてください。

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