Time
lagras inte med dess visningsformat i SQL Server.
Därför kan man ur användarperspektiv säga att den inte har något format.
Det är naturligtvis inte helt korrekt eftersom det har ett lagringsformat , men som en genomsnittlig användare kan du inte riktigt använda det.
Detta gäller för alla datatyper för datum och tid:Date
, DateTimeOffset
, DateTime2
, SmallDateTime
, DateTime
och Time
.
Om du behöver ett format behöver du inte casta till time
men till en char
. Använd Convert
för att få char
du behöver:
SELECT CONVERT(char(10), [time], 108) as CSTTime
Här är lite bakgrundsdata om du är intresserad:
I denna artikel publicerad 2000 förklarar författaren på djupet hur SQL Server behandlar datum och tider. Jag tvivlar på om något väsentligt förändrades mellan 2000 och 2015 i hur SQL Server lagrar date
, time
och datetime
värden internt.
Här är de relevanta citaten, om du inte vill läsa allt:
Så hur lagrar SQL Server internt datumen? Den använder 8 byte för att lagra ett datetime-värde – de första 4 för datumet och de andra 4 för tiden. SQL Server kan tolka båda uppsättningarna om 4 byte som heltal.
........
........
SQL Server lagrar det andra heltal för tiden som antalet klockan tickar efter midnatt. En andra innehåller 300 bockar, så en bock är lika med 3,3 millisekunder (ms).
sedan time
faktiskt lagras som ett 4 byte heltal, det har verkligen inte ett format som en integrerad del av datatypen.
Du kanske också vill kolla in den här artikeln för en mer detaljerad förklaring med kodexempel.