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.
sql-server-2008
megastrong001
quelle
quelle
SELECT
oder als berechnete Spalte tun ? Möchten Sie nur einen Domainnamen auf einer Ebene extrahieren (wie möchten Siewww.example.co.uk
behandelt werden?)?Antworten:
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.com
am Ende - sonst nichts (so wird es nicht die Arbeit an anderen Host - Maschine Namen wiesmtp.yahoo.com
und anderen Internet - Domains wie.org
,.edu
,.de
usw.)quelle
STUFF
undCHARINDEX
so verwenden:SET @Work = STUFF(@Work, CHARINDEX('www.', @Work), LEN('www.'), '')
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
quelle
Ich kann einen kleinen Hack geben, Sie können die T-SQL-Funktion verwenden. Versuche dies:
SELECT ID, PARSENAME(WebsiteName, 2) FROM dbo.YourTable .....
quelle
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
quelle
Dies funktioniert für die meisten Website-Namen:
SELECT ID, REVERSE(PARSENAME(REVERSE(WebsiteName), 2)) FROM dbo.YourTable .....
quelle