(DR)NO 10 Geschrieben 10. Februar 2016 Melden Teilen 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 Zitieren Link zu diesem Kommentar
NilsK 2.918 Geschrieben 10. Februar 2016 Melden Teilen 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 Zitieren Link zu diesem Kommentar
(DR)NO 10 Geschrieben 10. Februar 2016 Autor Melden Teilen 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 Zitieren Link zu diesem Kommentar
NilsK 2.918 Geschrieben 10. Februar 2016 Melden Teilen 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 Zitieren Link zu diesem Kommentar
(DR)NO 10 Geschrieben 10. Februar 2016 Autor Melden Teilen 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 Zitieren Link zu diesem Kommentar
NilsK 2.918 Geschrieben 10. Februar 2016 Melden Teilen Geschrieben 10. Februar 2016 Moin, prima, danke für die Rückmeldung! Gruß, Nils Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.