Este artículo contiene ejemplos de cómo convertir un smalldatetime valor a una fecha y hora valor en SQL Server.
La pequeña fecha y hora el tipo de datos no tiene segundos fraccionarios y su componente de segundos siempre se establece en cero (:00). Su precisión es al minuto más cercano.
La fechahora el tipo de datos, por otro lado, incluye una parte de segundos fraccionarios de 3 dígitos y su precisión se redondea a incrementos de .000, .003 o .007 segundos.
Cuando conviertes un smalldatetime valor a fecha y hora , la pequeña fecha el valor se copia en datetime valor. Los segundos fraccionarios se establecen en 0.
En la mayoría de los casos, será mejor que cambies a un datetime2 tipo de datos en lugar de una fecha y hora . Hacer esto proporcionará una mayor precisión, mientras usa el mismo tamaño de almacenamiento. Sin embargo, si realmente necesita que sea datetime , aquí hay algunos ejemplos.
Ejemplo 1:conversión implícita
Este es un ejemplo de una conversión implícita entre smalldatetime y fechahora .
DECLARE @thesmalldatetime smalldatetime, @thedatetime datetime; SET @thesmalldatetime = '2025-05-21 10:15:30'; SET @thedatetime = @thesmalldatetime; SELECT @thesmalldatetime AS 'smalldatetime', @thedatetime AS 'datetime';
Resultado:
+---------------------+-------------------------+ | smalldatetime | datetime | |---------------------+-------------------------| | 2025-05-21 10:16:00 | 2025-05-21 10:16:00.000 | +---------------------+-------------------------+
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 en segundo plano cuando intentamos asignar el smalldatetime valor a una fecha y hora 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 desde el valor real que intenté asignarle.
Sin embargo, la fecha y hora El valor incluye una parte fraccionaria de 3 dígitos que se establece en cero.
Ejemplo 2:cambiar la parte fraccionaria
Aunque la parte fraccionaria se establece en cero, una vez que haya convertido el valor a datetime , ahora puede cambiar la parte fraccionaria (y la parte de los segundos).
En este ejemplo, uso el DATEADD()
función para modificar los segundos fraccionarios de datetime valor.
DECLARE @thesmalldatetime smalldatetime, @thedatetime datetime; SET @thesmalldatetime = '2025-05-21 10:15:30'; SET @thedatetime = @thesmalldatetime; SELECT @thesmalldatetime AS 'smalldatetime', @thedatetime AS 'datetime', DATEADD(millisecond, 123, @thedatetime) AS 'datetime Modified';
Resultado (usando salida vertical):
smalldatetime | 2025-05-21 10:16:00 datetime | 2025-05-21 10:16:00.000 datetime Modified | 2025-05-21 10:16:00.123
Ejemplo 3: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 smalldatetime y fechahora .
DECLARE @thesmalldatetime smalldatetime; SET @thesmalldatetime = '2025-05-21 10:15:30'; SELECT @thesmalldatetime AS 'thesmalldatetime', CAST(@thesmalldatetime AS datetime) AS 'datetime';
Resultado:
+---------------------+-------------------------+ | thesmalldatetime | datetime | |---------------------+-------------------------| | 2025-05-21 10:16:00 | 2025-05-21 10:16:00.000 | +---------------------+-------------------------+
Ejemplo 4: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 @thesmalldatetime smalldatetime; SET @thesmalldatetime = '2025-05-21 10:15:30'; SELECT @thesmalldatetime AS 'thesmalldatetime', CONVERT(datetime, @thesmalldatetime) AS 'datetime';
Resultado:
+---------------------+-------------------------+ | thesmalldatetime | datetime | |---------------------+-------------------------| | 2025-05-21 10:16:00 | 2025-05-21 10:16:00.000 | +---------------------+-------------------------+
Como se mencionó, considere convertir a un datetime2 tipo de datos en lugar de datetime . Hacer esto proporciona una mayor precisión, mientras se usa el mismo tamaño de almacenamiento.