80

関数を使用してSQLで単語をフィルタリングする方法を教えてください。

説明しづらいので例を挙げます。

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

私が欲しいのは、ウェブサイトの名前を取得する方法です。このような出力を持つレコードを選択したい。「www.」を削除する方法 およびレコード内の「.com」。

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

助けてくれてありがとう。:D

4

5 に答える 5

132

これはどう?

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..comsmtp.yahoo.com.org.edu.de

于 2013-01-27T18:16:51.343 に答える
13

これは「。」の間のすべてを取得します 文字。これは、「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
于 2013-01-28T16:19:47.700 に答える
5

Hamlet Hakobyan が言及したバグを回避するために、replace の代わりに stuff を使用できます。

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
于 2015-01-06T21:19:06.677 に答える