SQL Server proporciona una amplia gama de funciones de fecha y hora que le permiten manipular y analizar datos temporales de manera efectiva. En este artículo, exploraremos algunas de las funciones de fecha y hora más comúnmente utilizadas en SQL Server y aprenderemos cómo utilizarlas en sus consultas.
Fecha actual, hora o zona horaria
Uno de los requisitos básicos al trabajar con datos de fecha y hora es recuperar la fecha, hora o zona horaria actual. SQL Server proporciona varias funciones para lograr esto:
SELECT
GETDATE() AS FechaHoraActual,
DATEPART(YEAR, GETDATE()) AS AñoActual,
DATEPART(MONTH, GETDATE()) AS MesActual,
DATEPART(DAY, GETDATE()) AS DíaActual,
DATEPART(HOUR, GETDATE()) AS HoraActual,
DATEPART(MINUTE, GETDATE()) AS MinutoActual,
DATEPART(SECOND, GETDATE()) AS SegundoActual,
DATEPART(MILLISECOND, GETDATE()) AS MilisegundoActual,
DATEPART(MICROSECOND, GETDATE()) AS MicrosegundoActual,
SYSDATETIMEOFFSET() AS FechaHoraActualConDesplazamiento,
SYSDATETIME() AS FechaHoraActualSinDesplazamiento,
CURRENT_TIMESTAMP AS MarcaDeTiempoActual,
CURRENT_TIME AS HoraActual,
CURRENT_DATE AS FechaActual,
CURRENT_TIMEZONE() AS ZonaHorariaActual;
La consulta anterior demuestra varias funciones para recuperar la fecha, hora y zona horaria actual. La función GETDATE()
devuelve la fecha y hora actual, mientras que la función DATEPART
le permite extraer partes específicas de la fecha y hora, como año, mes, día, hora, minuto, segundo, milisegundo y microsegundo.
La función SYSDATETIMEOFFSET()
devuelve la fecha y hora actual con el desplazamiento de la zona horaria, mientras que la función SYSDATETIME()
devuelve la fecha y hora actual sin el desplazamiento de la zona horaria. La función CURRENT_TIMESTAMP
es equivalente a SYSDATETIME()
y devuelve la fecha y hora actual sin el desplazamiento de la zona horaria.
La función CURRENT_TIME
devuelve la hora actual, CURRENT_DATE
devuelve la fecha actual y CURRENT_TIMEZONE()
devuelve la zona horaria actual.
Categorías de fecha
Cuando se trabaja con datos de fecha, a menudo es útil extraer partes específicas de la fecha, como año, mes, día, semana o trimestre. SQL Server proporciona funciones para realizar estas operaciones:
SELECT
FechaPedido,
YEAR(FechaPedido) AS AñoPedido,
MONTH(FechaPedido) AS MesPedido,
DAY(FechaPedido) AS DíaPedido,
DATEPART(WEEK, FechaPedido) AS SemanaPedido,
DATEPART(QUARTER, FechaPedido) AS TrimestrePedido
FROM
Ventas.Pedidos;
La consulta anterior demuestra cómo extraer varias partes de la fecha de la columna FechaPedido
en la tabla Ventas.Pedidos
. La función YEAR
devuelve el año, MONTH
devuelve el mes, DAY
devuelve el día, DATEPART(WEEK, FechaPedido)
devuelve el número de semana y DATEPART(QUARTER, FechaPedido)
devuelve el número de trimestre.
Funciones de día
SQL Server proporciona funciones para determinar el día del año, el día del mes y el día de la semana para una fecha dada:
SELECT
FechaPedido,
DATEPART(DAYOFYEAR, FechaPedido) AS DíaDelAño,
DATEPART(DAY, FechaPedido) AS DíaDelMes,
DATEPART(WEEKDAY, FechaPedido) AS DíaDeLaSemana
FROM
Ventas.Pedidos;
La consulta anterior demuestra cómo utilizar la función DATEPART
para extraer el día del año, el día del mes y el día de la semana de la columna FechaPedido
en la tabla Ventas.Pedidos
.
Funciones de cadena a fecha
A veces, es posible que necesite convertir una representación de cadena de una fecha o marca de tiempo en un tipo de datos de fecha o marca de tiempo. SQL Server proporciona funciones para realizar esta conversión:
SELECT
CONVERT(DATE, '2023-11-17') AS ValorFecha,
CONVERT(DATETIME, '2023-11-17 10:30:00') AS ValorFechaHora,
CONVERT(DATETIMEOFFSET, '2023-11-17 10:30:00 -07:00') AS ValorFechaHoraZonaHoraria
La consulta anterior demuestra cómo utilizar la función CONVERT
para convertir una representación de cadena de una fecha o marca de tiempo en el tipo de datos correspondiente. CONVERT(DATE, '2023-11-17')
convierte la cadena ‘2023-11-17’ en un tipo de datos DATE
, CONVERT(DATETIME, '2023-11-17 10:30:00')
convierte la cadena ‘2023-11-17 10:30:00’ en un tipo de datos DATETIME
y CONVERT(DATETIMEOFFSET, '2023-11-17 10:30:00 -07:00')
convierte la cadena ‘2023-11-17 10:30:00 -07:00’ en un tipo de datos DATETIMEOFFSET
.
Cálculos de fecha
SQL Server proporciona funciones para realizar varios cálculos de fecha, como calcular la diferencia entre dos fechas, extraer partes específicas de una fecha y formatear fechas:
SELECT
DATEDIFF(DAY, '2023-11-01', '2023-11-17') AS DíasEntre,
DATEADD(MONTH, 3, '2023-11-17') AS TresMesesDespués,
DATEPART(WEEKDAY, '2023-11-17') AS DíaDeLaSemana,
FORMAT('2023-11-17', 'dddd') AS NombreDíaDeLaSemana
La consulta anterior demuestra cómo utilizar la función DATEDIFF
para calcular el número de días entre dos fechas, la función DATEADD
para agregar un número especificado de meses a una fecha, la función DATEPART
para extraer el día de la semana de una fecha y la función FORMAT
para formatear una fecha como un día de la semana específico.
Aritmética de fechas
SQL Server proporciona funciones para realizar operaciones aritméticas con fechas, como agregar o restar días, meses o años:
SELECT
DATEADD(DAY, 1, GETDATE()) AS Mañana,
DATEADD(MONTH, 1, GETDATE()) AS PróximoMes,
DATEADD(YEAR, 1, GETDATE()) AS PróximoAño
La consulta anterior demuestra cómo utilizar la función DATEADD
para agregar un número especificado de días, meses o años a la fecha actual.
Partes de fecha vs. Truncamiento de fecha
SQL Server proporciona funciones para extraer partes específicas de una fecha o truncar una fecha a la parte más cercana:
SELECT
DATEPART(YEAR, GETDATE()) AS AñoActual,
DATEPART(MONTH, GETDATE()) AS MesActual,
DATEPART(DAY, GETDATE()) AS DíaActual,
DATEPART(HOUR, GETDATE()) AS HoraActual,
DATEPART(MINUTE, GETDATE()) AS MinutoActual,
DATEPART(SECOND, GETDATE()) AS SegundoActual,
DATEPART(MILLISECOND, GETDATE()) AS MilisegundoActual,
DATEPART(MICROSECOND, GETDATE()) AS MicrosegundoActual,
DATEFROMPARTS(2023, 11, 17) AS FechaDesdePartes,
EOMONTH(GETDATE()) AS ÚltimoDíaDelMes,
DATEADD(DAY, 1, DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0)) AS PrimerDíaDelMes,
DATEADD(HOUR, DATEDIFF(HOUR, 0, GETDATE()), 0) AS InicioDeLaHora
La consulta anterior demuestra cómo utilizar la función DATEPART
para extraer partes específicas de una fecha, como año, mes, día, hora, minuto, segundo, milisegundo y microsegundo. La función DATEFROMPARTS
le permite crear una fecha a partir de partes individuales, como año, mes y día. La función EOMONTH
devuelve el último día del mes para una fecha dada, mientras que la función DATEADD
se puede utilizar para truncar una fecha a la parte más cercana, como el primer día del mes o el inicio de una hora.
Conclusión
Trabajar con datos de fecha y hora es una tarea común en SQL Server. Al comprender y utilizar las diversas funciones de fecha y hora proporcionadas por SQL Server, puede manipular y analizar datos temporales de manera efectiva en sus consultas. En este artículo, exploramos algunas de las funciones de fecha y hora más comúnmente utilizadas, incluyendo la recuperación de la fecha, hora o zona horaria actual, la extracción de partes de fecha, la realización de cálculos de fecha, la conversión de cadenas a fechas y la realización de operaciones aritméticas con fechas.
Tener un buen entendimiento de estas funciones mejorará en gran medida su capacidad para trabajar con datos de fecha y hora en SQL Server y le permitirá resolver problemas empresariales complejos de manera eficiente.