Neue T-SQL Funktionen im SQL Server 2012 (Teil 3/4)

8. Februar 2012

Im dritten Teil werden die neuen Funktionen zum Konvertieren von Daten vorgestellt: TRY_CONVERT, PARSE und TRY_PARSE.
Dies sind zwar nur kleine Ergänzungen, aber sie machen das Leben einfacher.

TRY_CONVERT

Die neue Funktion TRY_CONVERT ist im Grunde nur eine Erweiterung der CONVERT Funktion. Im Gegensatz zu CONVERT wird aber kein Fehler geworfen wenn der Wert nicht konvertiert werden kann. Stattdessen liefert die Funktion NULL als Ergebnis.

Hier ein kleines Beispiel:

-- Läuft ohne Fehler
SELECT TRY_CONVERT(INT, 'ABC') AS ValueInt;
-- Bricht mit Fehler ab
SELECT CONVERT(INT, 'ABC') AS ValueInt;

TRY_CONVERT bietet sich in Szenarien mit generischen Daten an. Wenn z.B. eine Tabelle Daten verschiedener Typen enthält und die Werte in einer Textspalte speichert. Damit sind Abfragen wie diese möglich:

SELECT Wert
FROM GenerischeTabelle
WHERE DatenTyp = 'INT' AND TRY_CONVERT(INT, Wert) > 100

PARSE

Mit dieser Funktion kann ein String in einen anderen Datentyp konvertiert werden. Der Unterschied zu CAST und CONVERT ist ein optionaler USING Parameter der die zu verwendende Culture angibt. Erlaubt ist hier jede von .Net unterstützte Culture. Wird keine Culture angegeben wird die der aktuellen Session verwendet. Da die Funktion auf .Net CLR basiert ist die Performance ein wenig reduziert.

Hier ein Beispiel:

SELECT PARSE('02/29/2012' AS datetime USING 'en-US') AS [Parse mit US Culture]
SELECT PARSE('29/02/2012' AS datetime USING 'de-DE') AS [PARSE mit DE Culture]

Das Ergebnis beider Abfragen ist identisch: 2012-02-29 00:00:00.000

TRY_PARSE

TRY_PARSE ist das Gegenstück zu TRY_CONVERT. Der einzige Unterschied zur PARSE Funktion ist wieder, das bei einem Fehler NULL als Ergebnis zurückgegeben wird.

 

Im letzten Teil der Serie werden dann die neuen Logikfunktionen des SQL Servers 2012 vorgestellt.