In SQL Server, wanneer u de T-SQL FORMAT()
. gebruikt functie om een tijd te formatteren gegevenstype, moet u onthouden dat u eventuele dubbele punten of punten in uw opmaaktekenreeks moet escapen.
Dit komt omdat de FORMAT()
functie is gebaseerd op CLR-opmaakregels, die dicteren dat dubbele punten en punten moeten worden ontsnapt. Daarom, wanneer de notatietekenreeks (tweede parameter) een dubbele punt of punt bevat, moet de dubbele punt of punt worden ontsnapt met een backslash wanneer een invoerwaarde (eerste parameter) van de tijd is data type.
Voorbeeld 1 – Ontsnappen aan een dikke darm
Hier is een eenvoudig voorbeeld van het gebruik van de FORMAT()
functie om een tijd te formatteren gegevenstype.
SELECT FORMAT(CAST('11:28:15' AS time), 'hh\:mm') Result;
Resultaat:
+----------+ | Result | |----------| | 11:28 | +----------+
Let op de backslash in de opmaakreeks.
Voorbeeld 2 – Ontsnappen aan een periode
Hetzelfde geldt als we het willen opmaken met een punt:
SELECT FORMAT(CAST('11:28:15' AS time), 'hh\.mm') Result;
Resultaat:
+----------+ | Result | |----------| | 11.28 | +----------+
Voorbeeld 3 – Niet ontsnapt
Dit is wat er gebeurt als we niet ontsnappen aan de dubbele punt of punt.
SELECT FORMAT(CAST('11:28:15' AS time), 'hh:mm') 'Unescaped Colon', FORMAT(CAST('11:28:15' AS time), 'hh.mm') 'Unescaped Period';
Resultaat:
+-------------------+--------------------+ | Unescaped Colon | Unescaped Period | |-------------------+--------------------| | NULL | NULL | +-------------------+--------------------+
We krijgen NULL
in beide gevallen.
Voorbeeld 4 – Datum/tijd (geen escape nodig)
U hoeft alleen de dubbele punt en punt te escapen als de invoerwaarde van het gegevenstype time is . Als het datetime is (of datetime2 enz.), hoeft u er niet aan te ontsnappen.
Als ik het vorige voorbeeld gebruik, maar de invoerwaarden verander naar datetime2 , krijgen we het gewenste resultaat zonder iets te hoeven ontsnappen:
SELECT FORMAT(CAST('11:28:15' AS datetime2), 'hh:mm') 'Unescaped Colon', FORMAT(CAST('11:28:15' AS datetime2), 'hh.mm') 'Unescaped Period';
Resultaat:
+-------------------+--------------------+ | Unescaped Colon | Unescaped Period | |-------------------+--------------------| | 11:28 | 11.28 | +-------------------+--------------------+
Hetzelfde geldt voor sysdatetime :
SELECT FORMAT(SYSDATETIME(), 'hh:mm') 'Unescaped Colon', FORMAT(SYSDATETIME(), 'hh.mm') 'Unescaped Period';
Resultaat:
+-------------------+--------------------+ | Unescaped Colon | Unescaped Period | |-------------------+--------------------| | 04:46 | 04.46 | +-------------------+--------------------+