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

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

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

Cuando conviertes un datetime2 valor a una fecha tipo de datos, pierde la porción de tiempo. Sin embargo, también reduce el tamaño de almacenamiento de entre 7 y 9 bytes a 3 bytes. En cualquier caso, solo haría esta conversión si no necesita la porción de tiempo.

La fechahora2 El tipo de datos incluye la fecha y la hora con una fracción de segundos entre 0 y 7 (esto depende de cuántos segundos fraccionarios se le asignen). Su precisión es de 100 nanosegundos.

La fecha el tipo de datos, por otro lado, no incluye la hora y tiene una precisión de 1 día.

Ejemplo 1:conversión implícita

Este es un ejemplo de una conversión implícita entre datetime2 y fecha .

DECLARE 
  @thedatetime2 datetime2, 
  @thedate date;
SET @thedatetime2 = '2025-05-21 10:15:30.1234567';
SET @thedate = @thedatetime2;
SELECT 
  @thedatetime2 AS 'datetime2',
  @thedate AS 'date';

Resultado:

+-----------------------------+------------+
| datetime2                   | date       |
|-----------------------------+------------|
| 2025-05-21 10:15:30.1234567 | 2025-05-21 |
+-----------------------------+------------+

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 el datetime2 valor a una fecha variables.

Aquí podemos ver que la fecha el valor solo incluye la fecha (sin el componente de hora).

En este ejemplo, datetime2 El valor utiliza la precisión predeterminada (que da como resultado 7 lugares decimales). Esto podría reducirse a cualquier número y el resultado de la conversión sería el mismo.

DECLARE 
  @thedatetime2 datetime2(0), 
  @thedate date;
SET @thedatetime2 = '2025-05-21 10:15:30.1234567';
SET @thedate = @thedatetime2;
SELECT 
  @thedatetime2 AS 'datetime2',
  @thedate AS 'date';

Resultado:

+---------------------+------------+
| datetime2           | date       |
|---------------------+------------|
| 2025-05-21 10:15:30 | 2025-05-21 |
+---------------------+------------+

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 datetime2 y fecha .

DECLARE @thedatetime2 datetime2(4);
SET @thedatetime2 = '2025-05-21 10:15:30.1234';
SELECT 
  @thedatetime2 AS 'datetime2',
  CAST(@thedatetime2 AS date) AS 'date'; 

Resultado:

+--------------------------+------------+
| datetime2                | date       |
|--------------------------+------------|
| 2025-05-21 10:15:30.1234 | 2025-05-21 |
+--------------------------+------------+

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 @thedatetime2 datetime2(4);
SET @thedatetime2 = '2025-05-21 10:15:30.1234';
SELECT 
  @thedatetime2 AS 'datetime2',
  CONVERT(date, @thedatetime2) AS 'date'; 

Resultado:

+--------------------------+------------+
| datetime2                | date       |
|--------------------------+------------|
| 2025-05-21 10:15:30.1234 | 2025-05-21 |
+--------------------------+------------+