Jak usunąć ze zmiennej DATETIME część dotyczącą sekund i pozostałe, zostawiając datę i czas z dokładnością do minuty

21-sie-2013

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)

wynik konwersji do small date time

Jeżeli pracujesz na SQL 2012 lub nowszym, to można skorzystać także z funkcji DateTimeFromParts

 

Inne rozwiązania:

http://social.msdn.microsoft.com/Forums/sqlserver/en-US/5e4c8136-7ec8-4220-a711-86c0a3b29c74/removing-seconds-and-milliseconds-from-datetime

http://technet.microsoft.com/en-us/library/ms182418.aspx

 

Komentarze są wyłączone

Autor: Rafał Kraik