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.


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


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

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 .....

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

1

Dies funktioniert für die meisten Website-Namen:

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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.