関数を使って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
などの他のインターネットドメインでは動作しません)。
これは、"." 文字の間のすべてを取得します。 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