Hoppa till huvudinnehåll

Datatyper

Våran filosofi gällande data vi hämtar och behandlar är att alltid framställa den så korrekt och troget originalsystemen som möjligt. I vissa väl avvägda fall går vi ifrån detta och gör förenklingar och rättningar för användbarhetens skull där vi anser att strukturer och datatyper är onödigt komplexa eller uttrycksfulla.

Datum och tid

Ett sådant tillfälle där vi vill underlätta hanteringen och tolkningen av det hämtade datat gäller datum och tid. Samtidigt vill vi sträva efter att vara så exakta som möjligt och undvika missförstånd.

Generellt gäller att om ett dataattribut innehåller datum tillsammans med en tidpunkt ska denna alltid representeras av en datatyp som anger tidzon för tidpunkten för inte skapa godtycklighet. På samma sätt gäller att om ett attribut endast innehåller tidpunkter som är 00:00:00 antar vi att det egentligen endast är ett datum som attributet avses representera. I dessa fall gör vi konverteringar till den mer korrekta datatypen.

Observera

För attribut som endast har datum använder vi SQL-datatypen date och i fallet där tidpunkt med tidzon förekommer använder vi datatypen datetimeoffset.

Användartips för att hantera datatyp med tidzon

Om det vi något tillfälle skulle behövas återkonvertera ett attribut som fått datatyp med tidzon (datetimeoffset) till date eller datetime av kompabilitetsskäl följer här några tips hur det enkelt kan åstakommas.

Visa specifik tidzon för datetimeoffset attributet
SELECT <COLUMN_WITH_DATETIMEOFFSET_DATA_TYPE> AT TIME ZONE 'Central European Standard Time'
FROM <TABLE_NAME>
Konvertera från datetimeoffset till date
SELECT CONVERT(date, <COLUMN_WITH_DATETIMEOFFSET_DATA_TYPE> AT TIME ZONE 'Central European Standard Time')
FROM <TABLE_NAME>
Konvertera från datetimeoffset till datetime2
SELECT CONVERT(datetime2, <COLUMN_WITH_DATETIMEOFFSET_DATA_TYPE> AT TIME ZONE 'Central European Standard Time')
FROM <TABLE_NAME>

Ersätt <COLUMN_WITH_DATETIMEOFFSET_DATA_TYPE> med den databaskolumn med datatypen datetimeoffset som behöver konverteras och ersätt även med rätt tabellnamn istället för <TABLE_NAME>.

tips

I exemplen ovan används tidzonen CEST men det går givetvis bra att använda andra tidzoner som mål för konverteringen. Se systemvyn SELECT * FROM sys.time_zone_info för en lista på tillgängliga tidzonsnamn.