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