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

Ejemplos de conversión de 'fecha' a 'fecha y hora' en SQL Server (T-SQL)

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

Cuando conviertes una fecha valor a fecha y hora , se agrega información adicional al valor. Esto se debe a que la fecha y hora tipo de datos contiene información de fecha y hora. La fecha el tipo de datos, por otro lado, solo contiene información de fecha.

Ejemplo 1:conversión implícita

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

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 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 la fecha valor a una fecha y hora variables.

Podemos ver que la fecha La variable solo contiene información de fecha, mientras que la fecha y hora La variable contiene información de fecha y hora.

Cuando convierte entre fecha y fechahora , el componente de tiempo se establece en 00:00:00.000 . Esto se debe a que el valor de la fecha no contiene ninguna información de tiempo, por lo que no hay forma de que SQL Server sepa qué hora desea (si corresponde).

Ejemplo 2:modificar la hora

Si necesita cambiar la hora (pero mantener la misma fecha), puede usar DATEADD() función para hacer precisamente eso.

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 |
+------------+-------------------------+

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

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 |
+------------+-------------------------+

Entonces obtenemos el mismo resultado que la conversión implícita.

También podemos ajustar el tiempo así:

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 |
+------------+-------------------------+

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 @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 |
+------------+-------------------------+

Y ajustando la hora:

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 |
+------------+-------------------------+