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

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

Este artículo contiene ejemplos de cómo convertir un smalldatetime valor a un datetime2 valor en SQL Server.

La pequeña fecha y hora el tipo de datos no tiene fracciones de segundo y su componente de segundos siempre se establece en cero (:00). Su precisión es al minuto más cercano.

La fechahora2 El tipo de datos, por otro lado, le permite especificar una precisión de segundos fraccionarios de 0 a 7. Si no especifica esto, usará 7 (el valor predeterminado). Si especifica cero (0 ), su precisión será al segundo más cercano.

Cuando conviertes un smalldatetime valor a datetime2 , se copian las horas y los minutos. Los segundos y las fracciones de segundo se establecen en 0.

Ejemplo 1:conversión implícita

Este es un ejemplo de una conversión implícita entre smalldatetime y fechahora2 .

DECLARE 
  @thesmalldatetime smalldatetime,
  @thedatetime2 datetime2;
SET @thesmalldatetime = '2025-05-21 10:15:30';
SET @thedatetime2 = @thesmalldatetime;
SELECT 
  @thesmalldatetime AS 'smalldatetime',
  @thedatetime2 AS 'datetime2';

Resultado:

+---------------------+-----------------------------+
| smalldatetime       | datetime2                   |
|---------------------+-----------------------------|
| 2025-05-21 10:16:00 | 2025-05-21 10:16:00.0000000 |
+---------------------+-----------------------------+

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 un datetime2 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.

En este caso, el datetime2 value utiliza una precisión de 7. Esto se debe a que 7 es el valor predeterminado. No especifiqué una precisión y, por lo tanto, se utilizó el valor predeterminado. Esto da como resultado que se usen 7 ceros en la parte fraccionaria.

Ejemplo 2:eliminar la parte fraccionaria

Puede eliminar las fracciones de segundo si es necesario. Para hacer esto, simplemente use datetime2(0) al declarar la variable.

DECLARE 
  @thesmalldatetime smalldatetime,
  @thedatetime2 datetime2(0);
SET @thesmalldatetime = '2025-05-21 10:15:30';
SET @thedatetime2 = @thesmalldatetime;
SELECT 
  @thesmalldatetime AS 'smalldatetime',
  @thedatetime2 AS 'datetime2';

Resultado:

+---------------------+---------------------+
| smalldatetime       | datetime2           |
|---------------------+---------------------|
| 2025-05-21 10:16:00 | 2025-05-21 10:16:00 |
+---------------------+---------------------+

Entonces, en este caso, ambos tipos de datos devuelven el mismo valor. Sin embargo, la diferencia es que datetime2 tiene la capacidad de proporcionar precisión al segundo (en comparación con smalldatetime precisión al minuto).

Ejemplo:

DECLARE 
  @thesmalldatetime smalldatetime,
  @thedatetime2 datetime2(0);
SET @thesmalldatetime = '2025-05-21 10:15:30';
SET @thedatetime2 = @thesmalldatetime;
SELECT 
  DATEADD(second, 30, @thesmalldatetime) AS 'smalldatetime',
  DATEADD(second, 30, @thedatetime2) AS 'datetime2';

Resultado:

+---------------------+---------------------+
| smalldatetime       | datetime2           |
|---------------------+---------------------|
| 2025-05-21 10:17:00 | 2025-05-21 10:16:30 |
+---------------------+---------------------+

En este ejemplo utilicé DATEADD() Función para agregar 30 segundos a cada valor. Sin embargo, cada tipo de datos devuelve un resultado diferente. La fechahora2 El tipo de datos respeta la parte de los segundos y proporciona el resultado correcto con un 100 % de precisión. La pequeña fecha y hora el tipo, por otro lado, se redondea al minuto más cercano (mientras que la parte de los segundos permanece en cero).

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 fechahora2 .

DECLARE @thesmalldatetime smalldatetime;
SET @thesmalldatetime = '2025-05-21 10:15:30';
SELECT 
  @thesmalldatetime AS 'thesmalldatetime',
  CAST(@thesmalldatetime AS datetime2(0)) AS 'datetime2(0)';

Resultado:

+---------------------+---------------------+
| thesmalldatetime    | datetime2(0)        |
|---------------------+---------------------|
| 2025-05-21 10:16:00 | 2025-05-21 10:16:00 |
+---------------------+---------------------+

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(datetime2(0), @thesmalldatetime) AS 'datetime2(0)';

Resultado:

+---------------------+---------------------+
| thesmalldatetime    | datetime2(0)        |
|---------------------+---------------------|
| 2025-05-21 10:16:00 | 2025-05-21 10:16:00 |
+---------------------+---------------------+