I SQL Server, när du använder T-SQL FORMAT()
funktion för att formatera en tid datatyp måste du komma ihåg att undvika eventuella kolon eller punkter i din formatsträng.
Detta beror på att FORMAT()
funktionen förlitar sig på CLR-formateringsregler, som dikterar att kolon och punkter måste escapes. Därför, när formatsträngen (andra parametern) innehåller ett kolon eller punkt, måste kolonet eller perioden escapes med omvänt snedstreck när ett indatavärde (första parametern) är av tiden data typ.
Exempel 1 – Att fly ett kolon
Här är ett grundläggande exempel på hur du använder FORMAT()
funktion för att formatera en tid datatyp.
SELECT FORMAT(CAST('11:28:15' AS time), 'hh\:mm') Result;
Resultat:
+----------+ | Result | |----------| | 11:28 | +----------+
Notera snedstrecket i formatsträngen.
Exempel 2 – Att fly en period
Samma sak gäller om vi vill formatera den med en punkt:
SELECT FORMAT(CAST('11:28:15' AS time), 'hh\.mm') Result;
Resultat:
+----------+ | Result | |----------| | 11.28 | +----------+
Exempel 3 – Escaped
Det här är vad som händer om vi inte slipper tjocktarmen eller perioden.
SELECT FORMAT(CAST('11:28:15' AS time), 'hh:mm') 'Unescaped Colon', FORMAT(CAST('11:28:15' AS time), 'hh.mm') 'Unescaped Period';
Resultat:
+-------------------+--------------------+ | Unescaped Colon | Unescaped Period | |-------------------+--------------------| | NULL | NULL | +-------------------+--------------------+
Vi får NULL
i båda fallen.
Exempel 4 – Datetime (du behöver inte fly)
Du behöver bara lämna kolon och punkt om inmatningsvärdet är av datatypen tid . Om det är datumtid (eller datetime2 etc), behöver du inte undkomma dem.
Om jag använder föregående exempel, men byter indatavärden till datetime2 , får vi det önskade resultatet utan att behöva undkomma något:
SELECT FORMAT(CAST('11:28:15' AS datetime2), 'hh:mm') 'Unescaped Colon', FORMAT(CAST('11:28:15' AS datetime2), 'hh.mm') 'Unescaped Period';
Resultat:
+-------------------+--------------------+ | Unescaped Colon | Unescaped Period | |-------------------+--------------------| | 11:28 | 11.28 | +-------------------+--------------------+
Detsamma gäller för sysdatetime :
SELECT FORMAT(SYSDATETIME(), 'hh:mm') 'Unescaped Colon', FORMAT(SYSDATETIME(), 'hh.mm') 'Unescaped Period';
Resultat:
+-------------------+--------------------+ | Unescaped Colon | Unescaped Period | |-------------------+--------------------| | 04:46 | 04.46 | +-------------------+--------------------+