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

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

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.