Parse-Domäne, die aus einer bestimmten URL in T-SQL
Ich die Quelle dieser Antwort, wollte aber noch erweitern auf die Frage und konnte keine Lösungen hier auf stack oder durch google-Suche.
Substring domainname von URL-SQL
Grundsätzlich den obigen link löst mein problem mit einem einfachen URL-parsing "www.google.com" mit dem Ergebnis von google.
Was ich bin auf der Suche nach zu erweitern ist, dass die Lösung aus dem link oben hilft nicht mit url ' s wie 'www.maps.google.com" dass nur die Renditen Karten.
Was ich möchte, ist, es zu haben zurück 'google' aus der url "www.maps.google.com' oder return 'Beispiel' von 'www.test.example.com'.
Wenn jemand eine Lösung hat, ich wäre sehr dankbar.
Update: um genauer Zu sein werde ich auch brauchen-parsing auf second-level-domains, etc. 'www.maps.google.com.au' zurückkehren 'google'
Hier ist meine Sql-Funktion.
CREATE FUNCTION [dbo].[parseURL] (@strURL varchar(1000))
RETURNS varchar(1000)
AS
BEGIN
IF CHARINDEX('.', REPLACE(@strURL, 'www.','')) > 0
SELECT @strURL = LEFT(REPLACE(@strURL, 'www.',''), CHARINDEX('.',REPLACE(@strURL, 'www.',''))-1)
Else
SELECT @strURL = REPLACE(@strURL, 'www.','')
RETURN @strURL
END
- Wie würden Sie behandeln möchten, mit second-level-domains, z.B.
www.google.com.sg
oderbbc.co.uk
? - Ja ich einfach aktualisiert, meine Frage zu include second-level-domains. Ich möchte auch return 'google' aus 'www.google.com.sg'
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich würde vorschlagen, diese
Ansatz ist die Umwandlung von URL in XML und dann die XPath-um die Domäne zu suchen.
UPDATE
Hinsichtlich der second-level-domains, glaube ich, die einzige zuverlässige Weise, um Sie alle in einer Tabelle (top-level-domains dürften wohl in eine Tabelle zu) und dann könnte man diese Abfrage verwenden:
TLD/SLD-Tabellen, die ich für dieses Beispiel sind weiter unten. Die vollständige Liste der Domänen ist in diesem wiki. Seien Sie vorsichtig, verwenden
NVARCHAR
wie einige lokalisiert sind.Den TLD-Problem kann wirklich langsam nach unten Ihren code ein, und fügen Sie eine Wartung erforderlich, so entschied ich mich Unterdomänen einschließen. Hier ist, was ich verwenden:
Wahrscheinlich wird jemand eine bessere Lösung, aber hier ist was ich habe:
Ich bin nicht der beste im string-manipulation, so dass ich sicher bin, dass es möglich ist, zu verkürzen meine wirklich lange Zeile code. Grundsätzlich würde ich von der Verwendung der REVERSE-Funktion, um die Letzte Zeit und dann gehen von dort aus. Mein code bringt die Zeichen zwischen dem letzten und dem vorletzten Komma.
Sich bewusst sein, dass Sie eine website wie http://www.test.co.uk funktioniert nicht mit meiner Lösung. Ich würde vorschlagen, dass es ist nur ein Ausgangspunkt, und Sie würde haben, um code für Ausreißer.
PARSENAME wird split bis zu vier Elemente, getrennt durch "." zu markieren. Parsename zählt von der rechten Seite. Wenn die object_name zu analysieren, hat mehr als vier Teile wird NULL retruned.
Was ich hier getan habe Teilstring der url nach dem Protokoll '://'.
Ich habe dann nehmen Sie die Zeichenfolge und Teilzeichenfolge alle text bis zum ersten Schrägstrich.
Können Sie tun es in einer Linie wie auch, wenn Sie es benötigen, für eine Abfrage, oder verwenden Sie es als eine Skalare Funktion, würde ich es tun.
Auch, es wäre eine gute Idee, fügen Sie einige code, um zu überprüfen, für null-Werte oder nur schlechte Saiten im Allgemeinen. Wenn Sie möchten, halten Sie es als eine einzige Zeile code, versuchen Sie es mit der ISNULL-und NULLIF Funktionen.