Od wersji serwera SQL 2008 mamy do dyspozycji typ DATE i TIME i wiele innych zamiast jedynego do tej pory DATETIME. Typ DATE przechowuje datę (bez czasu) a typ TIME przechowuje czas (bez daty). Jednak jak połączyć to w całość, przypominającą dawny DATETIME (zawierający i datę i czas)?
Da się.
Zobacz ten skrypt:
DECLARE @time TIME = SYSDATETIME()
DECLARE @date DATE = SYSDATETIME()
DECLARE @datetime2 DATETIME2 = @time
SELECT @time,@date,@datetime2
SELECT DATEADD(day, DATEDIFF(day, @datetime2, @date),@datetime2)
Najpierw zadreklarowialiśmy zmienne typu TIME, DATE oraz DATETIME2. Przy czym @datetime2 przyjmuje wartość @time. Co za dziwne przyporządkowanie! Select poniżej prezentuje o co chodziło.
Teraz @datetime2 zawiera dobry czas, ale data jest niedobra… 1900-01-01.
W kolejnym więc kroku wyliczamy różnicę między aktualną wartością @datetime2, a datą zawartą w @date. Jest to instrukcja:
DATEDIFF(day, @datetime2, @date)
Wartość jest wyliczana w dniach.Pozostaje tę liczbę dni dodać teraz do @datetime2, aby uzyskać to o co chodziło.
Oto nasze wyliczenie:
SELECT DATEADD(day, DATEDIFF(day, @datetime2, @date),@datetime2)
a oto wynik:
Data i czas zostały sklejone!