sql >> Databasteknik >  >> RDS >> Sqlserver

Hur man castar DateTime till Time

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.



  1. Vad maskininlärning betyder för databasproffs

  2. Hur man aktiverar långsam frågeloggning i PostgreSQL

  3. Tre främsta trender som påverkar DBA:er Ansvariga för SQL Server-övervakning

  4. Oracle infoga om det inte finns uttalande