Este artículo contiene ejemplos de cómo convertir una fecha y hora valor a un smalldatetime valor en SQL Server.
Uno de los beneficios de convertir un datetime valor para smalldatetime es que reduce el tamaño de almacenamiento de 8 bytes a 4 bytes. Sin embargo, pierde precisión al hacerlo.
La fechahora el tipo de datos incluye una parte de segundos fraccionarios de 3 dígitos. Su precisión se redondea a incrementos de 0,000, 0,003 o 0,007 segundos.
La pequeña fecha y hora el tipo de datos, por otro lado, no tiene segundos fraccionarios y su componente de segundos siempre se establece en cero (:00). Además, solo tiene una precisión al minuto más cercano.
Cuando convierte una fecha y hora valor para smalldatetime , se copia la fecha y la parte de la hora. El componente de segundos se establece en cero (independientemente del valor original) y el tiempo se redondea al minuto más cercano. Se eliminan las fracciones de segundo.
Ejemplo 1:conversión implícita
Este es un ejemplo de una conversión implícita entre datetime y pequeña fecha y hora .
DECLARE @thedatetime datetime, @thesmalldatetime smalldatetime; SET @thedatetime = '2025-05-21 10:15:30.123'; SET @thesmalldatetime = @thedatetime; SELECT @thedatetime AS 'datetime', @thesmalldatetime AS 'smalldatetime';
Resultado:
+-------------------------+---------------------+ | datetime | smalldatetime | |-------------------------+---------------------| | 2025-05-21 10:15:30.123 | 2025-05-21 10:16:00 | +-------------------------+---------------------+
Esta es una conversión implícita porque no estamos usando una función de conversión (como las que se muestran a continuación) para convertirla explícitamente. En este caso, SQL Server realiza una conversión implícita entre bastidores cuando intentamos asignar la fecha y hora valor a un smalldatetime variables.
En este ejemplo podemos ver que smalldatetime el valor no incluye los segundos fraccionarios, los segundos se han establecido en cero y el minuto se ha redondeado.
Ejemplo 2:conversión explícita mediante CAST()
Este es un ejemplo de una conversión explícita. En este caso, uso el CAST()
función directamente dentro del SELECT
declaración para convertir explícitamente entre datetime y pequeña fecha y hora .
DECLARE @thedatetime datetime; SET @thedatetime = '2025-05-21 10:15:30.125'; SELECT @thedatetime AS 'datetime', CAST(@thedatetime AS smalldatetime) AS 'smalldatetime';
Resultado:
+-------------------------+---------------------+ | datetime | smalldatetime | |-------------------------+---------------------| | 2025-05-21 10:15:30.127 | 2025-05-21 10:16:00 | +-------------------------+---------------------+
Es posible que haya notado que en este ejemplo cambié las fracciones de segundo al asignar el valor inicial a @thedatetime
. Pero debido a que lo estoy asignando a una fecha y hora tipo de datos, la parte de los segundos fraccionarios se redondea hacia arriba (porque su precisión se redondea a incrementos de 0,000, 0,003 o 0,007 segundos). En este caso trato de asignar una fracción de segundo de 125
pero se redondea a 127
.
Sin embargo, esto no afecta el smalldatetime valor.
Ejemplo 3:conversión explícita mediante CONVERT()
Aquí hay un ejemplo de una conversión explícita usando CONVERT()
función en lugar de CAST()
.
DECLARE @thedatetime datetime; SET @thedatetime = '2025-05-21 10:15:30.125'; SELECT @thedatetime AS 'datetime', CONVERT(smalldatetime, @thedatetime) AS 'smalldatetime';
Resultado:
+-------------------------+---------------------+ | datetime | smalldatetime | |-------------------------+---------------------| | 2025-05-21 10:15:30.127 | 2025-05-21 10:16:00 | +-------------------------+---------------------+