Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Converter 'datetime2' em 'date' no SQL Server (Exemplos de T-SQL)


Este artigo contém exemplos de conversão de um datetime2 valor para uma data valor no SQL Server.

Ao converter um datetime2 valor para uma data tipo de dados, você perde a parte do tempo. No entanto, você também reduz o tamanho do armazenamento de 7 a 9 bytes para 3 bytes. De qualquer forma, você só faria essa conversão se não precisasse da parte do tempo.



O datetime2 tipo de dados inclui a data e hora com uma parte de segundos fracionários entre 0 e 7 (isso depende de quantos segundos fracionários são atribuídos a ele). Sua precisão é de 100 nanossegundos.

A data O tipo de dados, por outro lado, não inclui a hora e tem uma precisão de 1 dia.

Exemplo 1 – Conversão implícita


Aqui está um exemplo de uma conversão implícita entre datetime2 e data .
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 é uma conversão implícita porque não estamos usando uma função de conversão (como as abaixo) para convertê-la explicitamente. Nesse caso, o SQL Server executa uma conversão implícita nos bastidores quando tentamos atribuir o datetime2 valor para uma data variável.

Aqui podemos ver que a data valor inclui apenas a data (sem o componente de tempo).

Neste exemplo, o datetime2 value usa a precisão padrão (que resulta em 7 casas decimais). Isso poderia ser reduzido a qualquer número e o resultado da conversão seria o mesmo.
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 |
+---------------------+------------+

Exemplo 2 – Conversão explícita usando CAST()


Aqui está um exemplo de uma conversão explícita. Neste caso, eu uso o CAST() função diretamente dentro do SELECT instrução para converter explicitamente entre datetime2 e data .
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 |
+--------------------------+------------+

Exemplo 3 – Conversão explícita usando CONVERT()


Aqui está um exemplo de uma conversão explícita usando o CONVERT() função em vez 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 |
+--------------------------+------------+