Jak z wartości w zmiennej typu DATE i wartości w zmiennej typu TIME utworzyć wartość DATETIME2?

19-lis-2011

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!

 

Komentarze są wyłączone

Autor: Rafał Kraik