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.
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.
SELECT <COLUMN_WITH_DATETIMEOFFSET_DATA_TYPE> AT TIME ZONE 'Central European Standard Time'
FROM <TABLE_NAME>
SELECT CONVERT(date, <COLUMN_WITH_DATETIMEOFFSET_DATA_TYPE> AT TIME ZONE 'Central European Standard Time')
FROM <TABLE_NAME>
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>
.
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.