In SQL Server, wenn Sie das T-SQL FORMAT()
verwenden Funktion zum Formatieren einer Zeit Datentyp müssen Sie daran denken, Doppelpunkte oder Punkte in Ihrer Formatzeichenfolge zu maskieren.
Das liegt daran, dass FORMAT()
Die Funktion stützt sich auf CLR-Formatierungsregeln, die vorschreiben, dass Doppelpunkte und Punkte maskiert werden müssen. Wenn daher der Formatstring (zweiter Parameter) einen Doppelpunkt oder Punkt enthält, muss der Doppelpunkt oder Punkt mit einem umgekehrten Schrägstrich maskiert werden, wenn ein Eingabewert (erster Parameter) die Zeit ist Datentyp.
Beispiel 1 – Escapezeichen für einen Doppelpunkt
Hier ist ein einfaches Beispiel für die Verwendung von FORMAT()
Funktion zum Formatieren einer Zeit Datentyp.
SELECT FORMAT(CAST('11:28:15' AS time), 'hh\:mm') Result;
Ergebnis:
+----------+ | Result | |----------| | 11:28 | +----------+
Beachten Sie den umgekehrten Schrägstrich im Formatstring.
Beispiel 2 – Einem Punkt entkommen
Dasselbe gilt, wenn wir es mit einem Punkt formatieren wollen:
SELECT FORMAT(CAST('11:28:15' AS time), 'hh\.mm') Result;
Ergebnis:
+----------+ | Result | |----------| | 11.28 | +----------+
Beispiel 3 – Nicht maskiert
Folgendes passiert, wenn wir den Doppelpunkt oder Punkt nicht maskieren.
SELECT FORMAT(CAST('11:28:15' AS time), 'hh:mm') 'Unescaped Colon', FORMAT(CAST('11:28:15' AS time), 'hh.mm') 'Unescaped Period';
Ergebnis:
+-------------------+--------------------+ | Unescaped Colon | Unescaped Period | |-------------------+--------------------| | NULL | NULL | +-------------------+--------------------+
Wir erhalten NULL
in beiden Fällen.
Beispiel 4 – Datetime (kein Escape erforderlich)
Sie müssen den Doppelpunkt und den Punkt nur maskieren, wenn der Eingabewert vom Datentyp time ist . Wenn es datetime ist (oder datetime2 usw.), müssen Sie ihnen nicht entkommen.
Wenn ich das vorherige Beispiel verwende, ändere aber die Eingabewerte auf datetime2 , erhalten wir das gewünschte Ergebnis, ohne irgendetwas maskieren zu müssen:
SELECT FORMAT(CAST('11:28:15' AS datetime2), 'hh:mm') 'Unescaped Colon', FORMAT(CAST('11:28:15' AS datetime2), 'hh.mm') 'Unescaped Period';
Ergebnis:
+-------------------+--------------------+ | Unescaped Colon | Unescaped Period | |-------------------+--------------------| | 11:28 | 11.28 | +-------------------+--------------------+
Dasselbe gilt für sysdatetime :
SELECT FORMAT(SYSDATETIME(), 'hh:mm') 'Unescaped Colon', FORMAT(SYSDATETIME(), 'hh.mm') 'Unescaped Period';
Ergebnis:
+-------------------+--------------------+ | Unescaped Colon | Unescaped Period | |-------------------+--------------------| | 04:46 | 04.46 | +-------------------+--------------------+