(DR)NO 10 Geschrieben 10. Februar 2016 Melden Geschrieben 10. Februar 2016 Hallo zusammen, für den vergleich von Inventarisierungsdaten in einer Datenbank versuche ich derzeit mithilfe einer SQL-Query nur den Hostname aus einem DNS-Namen zu selektieren. Hat ggf. jemand einen Tip wie man einen Text bis zu einem Trennzeichen ausgibt? Folgende Lösung habe ich derzeit gefunden, leider wird aber das Trennzeichen noch mit Angezeigt: (MS-SQL) SQL-Tabelle: INVENT Spalte: DNS_Name enthält Texte in der Form servername.domaene.de SELECT (Left([DNS_NAME],(SELECT CHARINDEX('.', [DNS_NAME],-1)))) As Name,DNS_NAME From INVENT Als Ausgabe kommt jetzt für den Inhalt "sv1.test.de" das Ergebnis "sv1." Nun muss leider noch der "." Punkt irgendwie weg. Viele Grüße Tobi
NilsK 3.046 Geschrieben 10. Februar 2016 Melden Geschrieben 10. Februar 2016 Moin, da du ja mit "LEFT" den String bis zur numerischen Position des Punkts ausgibst, musst du an dein CHARINDEX-Statement noch "+1" oder "-1" anfügen (kann ich grad nicht austesten). Vermutlich "minus eins", denn der Index in deinem Beispiel ist ja 4, du willst also die Zeichen bis zur Position 3 haben. Gruß, Nils
(DR)NO 10 Geschrieben 10. Februar 2016 Autor Melden Geschrieben 10. Februar 2016 Hallo Nils, wow, vielen Dank für die schnelle Antwort. Ich habe das gerade getestet, leider bekomme ich einen Fehler, wahrscheinlich weil 'NULL' Werte in der Tabelle für "-1" enthalten sind: SELECT (Left([DNS_NAME],((SELECT CHARINDEX('.', [DNS_NAME],1))-1))) As Name,DNS_NAME From INVENT Fehler: Msg 537, Level 16, State 3, Line 46 Invalid length parameter passed to the LEFT or SUBSTRING function. Mit SELECT (Left([DNS_NAME],((SELECT CHARINDEX('.', [DNS_NAME],1))+1))) As Name,DNS_NAME From INVENT bekomme ich die Ausgabe sv1.t bei dem Inhalt sv1.test.de. Also würde das "-1" wie Du geschrieben hast schon passen. Gruß Tobi
NilsK 3.046 Geschrieben 10. Februar 2016 Melden Geschrieben 10. Februar 2016 Moin, du könntest das abfangen, indem du eine WHERE-Klausel mit "IS NOT NULL" einfügst. Oder du nutzt die Funktion "ISNULL" für die Spalte DNS_NAME, um bei NULL-Werten einen Dummy-String nur mit einem Punkt anzugeben (wodurch die Berechnung dann 0 ergibt, was für LEFT keinen Fehler ergeben sollte; der Wert darf nur nicht negativ sein). Gruß, Nils
(DR)NO 10 Geschrieben 10. Februar 2016 Autor Melden Geschrieben 10. Februar 2016 Hey Nils, genau, das ist die Lösung! Danke! Ich musste allerdings noch bei der Query die Einträge ohne Trennzeichen entfernen, sonst kommt auch der Fehler. Also, hier die funktionierende Version: SELECT (Left([DNS_NAME],((SELECT CHARINDEX('.', [DNS_NAME],1)where DNS_NAME is not null AND DNS_NAME like '%.%')-1))) As Name,DNS_NAME From INVENT Vielen Dank, sonst hätte ich noch lange gesucht. Gruß Tobi
NilsK 3.046 Geschrieben 10. Februar 2016 Melden Geschrieben 10. Februar 2016 Moin, prima, danke für die Rückmeldung! Gruß, Nils
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde dich hier an.
Jetzt anmelden