So erstellen Sie eine Funktion in SQL Server

72

Bitte helfen Sie mir, wie man Wörter in SQL mithilfe einer Funktion filtert.

Es fällt mir schwer, wenn ich es erkläre, also gebe ich ein Beispiel:

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

Was ich will ist, wie man den Namen der Website bekommt. Ich möchte den Datensatz mit einer solchen Ausgabe auswählen. So entfernen Sie das "www". und '.com' in der Aufzeichnung.

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

Danke für die Hilfe. : D.

megastrong001
quelle
3
Sie haben nicht ausreichend erklärt. Möchten Sie dies nur während einer SELECToder als berechnete Spalte tun ? Möchten Sie nur einen Domainnamen auf einer Ebene extrahieren (wie möchten Sie www.example.co.ukbehandelt werden?)?
Damien_The_Unbeliever

Antworten:

122

Wie wäre es damit?

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

und dann benutze:

SELECT ID, dbo.StripWWWandCom (WebsiteName)
FROM dbo.YourTable .....

Natürlich ist dies stark eingeschränkt , dass sie nur Streifen werden www.am Anfang und .comam Ende - sonst nichts (so wird es nicht die Arbeit an anderen Host - Maschine Namen wie smtp.yahoo.comund anderen Internet - Domains wie .org, .edu, .deusw.)

marc_s
quelle
2
Sie könnten das STUFFund CHARINDEXso verwenden: SET @Work = STUFF(@Work, CHARINDEX('www.', @Work), LEN('www.'), '')
Winnifred
13

Dieser bekommt alles zwischen dem "." Zeichen. Bitte beachten Sie, dass dies bei komplexeren URLs wie "www.somesite.co.uk" nicht funktioniert. Idealerweise prüft die Funktion, wie viele Instanzen des "." Zeichen und wählen Sie den Teilstring entsprechend.

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
Nicole Castle
quelle
8

Ich kann einen kleinen Hack geben, Sie können die T-SQL-Funktion verwenden. Versuche dies:

SELECT ID, PARSENAME(WebsiteName, 2)
FROM dbo.YourTable .....
Weiler Hakobyan
quelle
5

Sie können Dinge anstelle von Ersetzen verwenden, um den von Hamlet Hakobyan erwähnten Fehler zu vermeiden

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
Akki
quelle
1

Dies funktioniert für die meisten Website-Namen:

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

Balaji
quelle