Тази статия съдържа примери за преобразуване на дата и час стойност до дата стойност в SQL Server.
Очевидната последица от преобразуването на datetime стойност до дата е, че губите времевата част. Едно предимство обаче е, че намалявате размера на съхранение от 8 байта на 3 байта. Така или иначе, бихте направили това преобразуване само ако не се нуждаете от времевата част.
Дата и час типът данни включва датата и часа с 3-цифрена част от секундите. Неговата точност се закръглява до стъпки от .000, .003 или .007 секунди.
Обаче датата Типът данни има точност от 1 ден (и не включва часа, както беше споменато).
Пример 1 – Неявно преобразуване
Ето пример за имплицитно преобразуване между дата и час и дата .
DECLARE @thedatetime datetime, @thedate date; SET @thedatetime = '2025-05-21 10:15:30.123'; SET @thedate = @thedatetime; SELECT @thedatetime AS 'datetime', @thedate AS 'date';
Резултат:
+-------------------------+------------+ | datetime | date | |-------------------------+------------| | 2025-05-21 10:15:30.123 | 2025-05-21 | +-------------------------+------------+
Това е имплицитно преобразуване, защото не използваме функция за преобразуване (като тези по-долу), за да я преобразуваме изрично. В този случай SQL Server извършва имплицитно преобразуване зад кулисите, когато се опитваме да присвоим datetime стойност до дата променлива.
В този пример можем да видим, че дата стойността включва само датата (без компонента за време).
Пример 2 – Изрично преобразуване с помощта на CAST()
Ето пример за изрично преобразуване. В този случай използвам CAST()
функция директно в SELECT
изявление за изрично преобразуване между datetime и дата .
DECLARE @thedatetime datetime; SET @thedatetime = '2025-05-21 10:15:30.123'; SELECT @thedatetime AS 'datetime', CAST(@thedatetime AS date) AS 'date';
Резултат:
+-------------------------+------------+ | datetime | date | |-------------------------+------------| | 2025-05-21 10:15:30.123 | 2025-05-21 | +-------------------------+------------+
Пример 3 – Изрично преобразуване с помощта на CONVERT()
Ето пример за изрично преобразуване с помощта на CONVERT()
функция вместо CAST()
.
DECLARE @thedatetime datetime; SET @thedatetime = '2025-05-21 10:15:30.123'; SELECT @thedatetime AS 'datetime', CONVERT(date, @thedatetime) AS 'date';
Резултат:
+-------------------------+------------+ | datetime | date | |-------------------------+------------| | 2025-05-21 10:15:30.123 | 2025-05-21 | +-------------------------+------------+