sql >> Database >  >> RDS >> Sqlserver

Hoe de DateTime naar de tijd te casten

Time wordt niet opgeslagen met zijn weergaveformaat in SQL Server.
Daarom kun je vanuit het gebruikersperspectief zeggen dat het geen formaat heeft.
Natuurlijk is dat niet helemaal juist, aangezien het wel een opslagformaat heeft , maar als gemiddelde gebruiker kun je het niet echt gebruiken.
Dit geldt voor alle gegevenstypen voor datum en tijd:
Date , DateTimeOffset , DateTime2 , SmallDateTime , DateTime en Time .

Als je een indeling nodig hebt, hoef je niet te casten naar time maar naar een char . Gebruik Convert om de char . te krijgen je hebt nodig:

SELECT CONVERT(char(10), [time], 108) as CSTTime 

Hier zijn wat achtergrondgegevens als je geïnteresseerd bent:

In dit in 2000 gepubliceerde artikel legt de schrijver uitgebreid uit hoe SQL Server met datums en tijden omgaat. Ik betwijfel of er iets belangrijks is veranderd tussen 2000 en 2015 in de manier waarop SQL Server date opslaat , time en datetime waarden intern.

Hier zijn de relevante citaten, als u niet alles wilt lezen:

Dus hoe slaat SQL Server de datums intern op? Het gebruikt 8 bytes om een ​​datetime-waarde op te slaan:de eerste 4 voor de datum en de tweede 4 voor de tijd. SQL Server kan beide sets van 4 bytes interpreteren als gehele getallen.
........
........
SQL Server slaat het tweede gehele getal voor de tijd op als het aantal kloktikken na middernacht. Een seconde bevat 300 ticks, dus een tick is gelijk aan 3,3 milliseconden (ms).

sinds time wordt eigenlijk opgeslagen als een geheel getal van 4 bytes, het heeft echt geen formaat als integraal onderdeel van het gegevenstype.

Misschien wil je dit artikel ook lezen voor een meer gedetailleerde uitleg met codevoorbeelden.



  1. Hoe een onbeperkt menuniveau te bouwen via PHP en mysql

  2. android.database.sqlite.SQLiteCantOpenDatabaseException:onbekende fout (code 14):kon database niet openen

  3. Fix 'De applicatie "SQLDeveloper.app" kan niet worden geopend.'

  4. PostgreSQL-streamingreplicatie - een diepe duik