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

Exemplos de conversão de 'date' para 'datetime' no SQL Server (T-SQL)


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

Ao converter uma data valor para datetime , informações extras são adicionadas ao valor. Isso ocorre porque o datetime tipo de dados contém informações de data e hora. A data O tipo de dados, por outro lado, contém apenas informações de data.


Exemplo 1 – Conversão implícita


Aqui está um exemplo de uma conversão implícita entre data e datahora .
DECLARE @thedate date, @thedatetime datetime
SET @thedate = '2020-12-01'
SET @thedatetime = @thedate
SELECT 
  @thedate AS 'date',
  @thedatetime AS 'datetime';

Resultado:
+------------+-------------------------+
| date       | datetime                |
|------------+-------------------------|
| 2020-12-01 | 2020-12-01 00:00:00.000 |
+------------+-------------------------+

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 realiza uma conversão implícita nos bastidores quando tentamos atribuir a data valor para um datetime variável.

Podemos ver que a data A variável contém apenas informações de data, enquanto a variável datetime A variável contém informações de data e hora.

Quando você converte entre data e datahora , o componente de tempo é definido como 00:00:00.000 . Isso ocorre porque o valor de data não contém nenhuma informação de hora, portanto, não há como o SQL Server saber a que horas você deseja (se houver).

Exemplo 2 – Modificar a hora


Se você precisar alterar a hora (mas manter a mesma data), você pode usar o DATEADD() função para fazer exatamente isso.
DECLARE @thedate date, @thedatetime datetime
SET @thedate = '2020-12-01'
SET @thedatetime = @thedate
SET @thedatetime = DATEADD(hour, 8, @thedatetime)
SELECT 
  @thedate AS 'date',
  @thedatetime AS 'datetime';

Resultado:
+------------+-------------------------+
| date       | datetime                |
|------------+-------------------------|
| 2020-12-01 | 2020-12-01 08:00:00.000 |
+------------+-------------------------+

Exemplo 3 – 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 declaração para converter explicitamente entre data e datahora .
DECLARE @thedate date
SET @thedate = '2020-12-01'
SELECT 
  @thedate AS 'date',
  CAST(@thedate AS datetime) AS 'datetime';

Resultado:
+------------+-------------------------+
| date       | datetime                |
|------------+-------------------------|
| 2020-12-01 | 2020-12-01 00:00:00.000 |
+------------+-------------------------+

Assim, obtemos o mesmo resultado da conversão implícita.

Também podemos ajustar o tempo assim:
DECLARE @thedate date
SET @thedate = '2020-12-01'
SELECT 
  @thedate AS 'date',
  DATEADD(hour, 8, CAST(@thedate AS datetime)) AS 'datetime';

Resultado:
+------------+-------------------------+
| date       | datetime                |
|------------+-------------------------|
| 2020-12-01 | 2020-12-01 08:00:00.000 |
+------------+-------------------------+

Exemplo 4 – 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 @thedate date
SET @thedate = '2020-12-01'
SELECT 
  @thedate AS 'date',
  CONVERT(datetime, @thedate) AS 'datetime';

Resultado:
+------------+-------------------------+
| date       | datetime                |
|------------+-------------------------|
| 2020-12-01 | 2020-12-01 00:00:00.000 |
+------------+-------------------------+

E ajustando o tempo:
DECLARE @thedate date
SET @thedate = '2020-12-01'
SELECT 
  @thedate AS 'date',
  DATEADD(hour, 8, CONVERT(datetime, @thedate)) AS 'datetime';

Resultado:
+------------+-------------------------+
| date       | datetime                |
|------------+-------------------------|
| 2020-12-01 | 2020-12-01 08:00:00.000 |
+------------+-------------------------+