sql >> Base de Datos >  >> RDS >> Sqlserver

Convierta 'datetime' a 'smalldatetime' en SQL Server (ejemplos de T-SQL)

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 |
+-------------------------+---------------------+