Problem jest następujący. Mamy czas z taką dokładnością jak np DATETIME lub DATETIME2. Chcemy pozbyć się części od sekund w dół, czyli mają pozostać tylko data, godzina i minuta.
Z pomocą przychodzi tym SMALLDATETIME. Działa on z dokładnością do sekund, ale… kiedy konwertujesz do niego, to funkcja CAST przeprowadza konwersję z dokładnością do minut! Czemu by z tego nie skorzystać!?
DECLARE @d DATETIME = '2013-08-20 23:31:23′
SELECT CAST(@d AS SMALLDATETIME)
Jeśli z jakiegoś powodu chcemy, aby wynik był typu datetime, należy jeszcze raz dodać konwersję:
SELECT CAST(CAST(@d AS SMALLDATETIME) AS DATETIME)
Jeżeli pracujesz na SQL 2012 lub nowszym, to można skorzystać także z funkcji DateTimeFromParts
Inne rozwiązania:
http://technet.microsoft.com/en-us/library/ms182418.aspx