Problema
SQL Server tiene varias funciones de fecha y hora diferentes y tratar de recordar cada función no es fácil. Por lo tanto, armamos un documento que muestra las diferentes funciones de fecha y hora en un solo lugar junto con ejemplos para que poder encontrar lo que está buscando sea mucho más fácil.
Solución
Creo que este consejo te resultará útil. Se creó como una referencia rápida a las funciones comunes de fecha y hora de SQL Server. Está dividido en las mismas secciones que la documentación de Microsoft:
- Funciones de mayor precisión
- Funciones de menor precisión
- Funciones de partes de fecha y hora
- Funciones de fecha y hora de piezas
- Funciones de valores de diferencia de fecha y hora
- Funciones de modificación de valores de fecha y hora
- Validar funciones de valores de fecha y hora
El código se probó en SQL Server 2016 y GETDATE () se usa siempre que sea posible, ya que pensamos que se simplificaban las cosas. Nota: la mayoría de estas funciones funcionarán para versiones anteriores a SQL 2016, pero es posible que algunas no.
Funciones SYSDATETIME, SYSDATETIMEOFFSET y SYSUTCDATETIME de SQL Server
Las funciones de fecha y hora de alta precisión de SQL Server tienen una escala de 7 y son:
- SYSDATETIME: devuelve la fecha y la hora de la máquina en la que se ejecuta SQL Server
- SYSDATETIMEOFFSET: devuelve la fecha y la hora de la máquina en la que se ejecuta SQL Server más el desplazamiento de UTC
- SYSUTCDATETIME: devuelve la fecha y la hora de la máquina en la que se ejecuta SQL Server como UTC
-- higher precision functions SELECT SYSDATETIME() AS 'DateAndTime'; -- return datetime2(7) SELECT SYSDATETIMEOFFSET() AS 'DateAndTime+Offset'; -- datetimeoffset(7) SELECT SYSUTCDATETIME() AS 'DateAndTimeInUtc'; -- returns datetime2(7)
SQL Server T-SQL Code | Date Function | Result |
---|---|---|
SELECT SYSDATETIME() AS ‘DateAndTime’; — return datetime2(7) | DateAndTime | 2019-03-08 10:24:34.4377944 |
SELECT SYSDATETIMEOFFSET() AS ‘DateAndTime+Offset’; — datetimeoffset(7) | DateAndTime+Offset | 2019-03-08 10:24:34.4377944 -05:00 |
SELECT SYSUTCDATETIME() AS ‘DateAndTimeInUtc’; — returns datetime2(7) | DateAndTimeInUtc | 2019-03-08 15:24:34.4377944 |
Inicia 12 de Septiembre
Funciones de SQL Server CURRENT_TIMESTAMP, GETDATE () y GETUTCDATE ()
Las funciones de tiempo y datos de menor precisión de SQL Server tienen una escala de 3 y son:
- CURRENT_TIMESTAMP: devuelve la fecha y hora de la máquina en la que se ejecuta SQL Server
- GETDATE (): devuelve la fecha y la hora de la máquina en la que se ejecuta SQL Server
- GETUTCDATE (): devuelve la fecha y la hora de la máquina en la que se ejecuta SQL Server como UTC
-- lesser precision functions - returns datetime SELECT CURRENT_TIMESTAMP AS 'DateAndTime'; -- note: no parentheses SELECT GETDATE() AS 'DateAndTime'; SELECT GETUTCDATE() AS 'DateAndTimeUtc';
SQL Server T-SQL Code | Date Function | Result |
---|---|---|
SELECT CURRENT_TIMESTAMP AS ‘DateAndTime’; — note: no parentheses | DateAndTime | 2019-03-08 10:28:23.643 |
SELECT GETDATE() AS ‘DateAndTime’; | DateAndTime | 2019-03-08 10:28:23.643 |
SELECT GETUTCDATE() AS ‘DateAndTimeUtc’; | DateAndTimeUtc | 2019-03-08 15:28:23.643 |
Función DATENAME de SQL Server
- DATENAME: devuelve una cadena correspondiente a la parte de fecha especificada
-- date and time parts - returns nvarchar SELECT DATENAME(YEAR, GETDATE()) AS 'Year'; SELECT DATENAME(QUARTER, GETDATE()) AS 'Quarter'; SELECT DATENAME(MONTH, GETDATE()) AS 'Month'; SELECT DATENAME(DAYOFYEAR, GETDATE()) AS 'DayOfYear'; SELECT DATENAME(DAY, GETDATE()) AS 'Day'; SELECT DATENAME(WEEK, GETDATE()) AS 'Week'; SELECT DATENAME(WEEKDAY, GETDATE()) AS 'WeekDay'; SELECT DATENAME(HOUR, GETDATE()) AS 'Hour'; SELECT DATENAME(MINUTE, GETDATE()) AS 'Minute'; SELECT DATENAME(SECOND, GETDATE()) AS 'Second'; SELECT DATENAME(MILLISECOND, GETDATE()) AS 'MilliSecond'; SELECT DATENAME(MICROSECOND, GETDATE()) AS 'MicroSecond'; SELECT DATENAME(NANOSECOND, GETDATE()) AS 'NanoSecond'; SELECT DATENAME(ISO_WEEK, GETDATE()) AS 'Week';
SQL Server T-SQL Code | Date Function | Result |
---|---|---|
SELECT DATENAME(YEAR, GETDATE()) AS ‘Year’; | Year | 2019 |
SELECT DATENAME(QUARTER, GETDATE()) AS ‘Quarter’; | Quarter | 1 |
SELECT DATENAME(MONTH, GETDATE()) AS ‘Month’; | Month | March |
SELECT DATENAME(DAYOFYEAR, GETDATE()) AS ‘DayOfYear’; | DayOfYear | 67 |
SELECT DATENAME(DAY, GETDATE()) AS ‘Day’; | Day | 8 |
SELECT DATENAME(WEEK, GETDATE()) AS ‘Week’; | Week | 10 |
SELECT DATENAME(WEEKDAY, GETDATE()) AS ‘WeekDay’; | WeekDay | Friday |
SELECT DATENAME(HOUR, GETDATE()) AS ‘Hour’; | Hour | 11 |
SELECT DATENAME(MINUTE, GETDATE()) AS ‘Minute’; | Minute | 25 |
SELECT DATENAME(SECOND, GETDATE()) AS ‘Second’; | Second | 44 |
SELECT DATENAME(MILLISECOND, GETDATE()) AS ‘MilliSecond’; | MilliSecond | 426 |
SELECT DATENAME(MICROSECOND, GETDATE()) AS ‘MicroSecond’; | MicroSecond | 426666 |
SELECT DATENAME(NANOSECOND, GETDATE()) AS ‘NanoSecond’; | NanoSecond | 426666666 |
SELECT DATENAME(ISO_WEEK, GETDATE()) AS ‘Week’; | Week | 10 |
Inicia 12 de Septiembre
Función DATEPART de SQL Server
- DATEPART: devuelve un número entero correspondiente a la parte de fecha especificada
-- date and time parts - returns int SELECT DATEPART(YEAR, GETDATE()) AS 'Year'; SELECT DATEPART(QUARTER, GETDATE()) AS 'Quarter'; SELECT DATEPART(MONTH, GETDATE()) AS 'Month'; SELECT DATEPART(DAYOFYEAR, GETDATE()) AS 'DayOfYear'; SELECT DATEPART(DAY, GETDATE()) AS 'Day'; SELECT DATEPART(WEEK, GETDATE()) AS 'Week'; SELECT DATEPART(WEEKDAY, GETDATE()) AS 'WeekDay'; SELECT DATEPART(HOUR, GETDATE()) AS 'Hour'; SELECT DATEPART(MINUTE, GETDATE()) AS 'Minute'; SELECT DATEPART(SECOND, GETDATE()) AS 'Second'; SELECT DATEPART(MILLISECOND, GETDATE()) AS 'MilliSecond'; SELECT DATEPART(MICROSECOND, GETDATE()) AS 'MicroSecond'; SELECT DATEPART(NANOSECOND, GETDATE()) AS 'NanoSecond'; SELECT DATEPART(ISO_WEEK, GETDATE()) AS 'Week';
SQL Server T-SQL Code | Date Function | Result |
---|---|---|
SELECT DATEPART(YEAR, GETDATE()) AS ‘Year’; | Year | 2019 |
SELECT DATEPART(QUARTER, GETDATE()) AS ‘Quarter’; | Quarter | 1 |
SELECT DATEPART(MONTH, GETDATE()) AS ‘Month’; | Month | 3 |
SELECT DATEPART(DAYOFYEAR, GETDATE()) AS ‘DayOfYear’; | DayOfYear | 67 |
SELECT DATEPART(DAY, GETDATE()) AS ‘Day’; | Day | 8 |
SELECT DATEPART(WEEK, GETDATE()) AS ‘Week’; | Week | 10 |
SELECT DATEPART(WEEKDAY, GETDATE()) AS ‘WeekDay’; | WeekDay | 6 |
SELECT DATEPART(HOUR, GETDATE()) AS ‘Hour’; | Hour | 10 |
SELECT DATEPART(MINUTE, GETDATE()) AS ‘Minute’; | Minute | 36 |
SELECT DATEPART(SECOND, GETDATE()) AS ‘Second’; | Second | 14 |
SELECT DATEPART(MILLISECOND, GETDATE()) AS ‘MilliSecond’; | MilliSecond | 43 |
SELECT DATEPART(MICROSECOND, GETDATE()) AS ‘MicroSecond’; | MicroSecond | 43333 |
SELECT DATEPART(NANOSECOND, GETDATE()) AS ‘NanoSecond’; | NanoSecond | 43333333 |
SELECT DATEPART(ISO_WEEK, GETDATE()) AS ‘Week’; | Week | 10 |
Inicia 12 de Septiembre
Funciones de DÍA, MES y AÑO de SQL Server
- DÍA: devuelve un número entero correspondiente al día especificado.
- MES: devuelve un número entero correspondiente al mes especificado.
- AÑO: devuelve un número entero correspondiente al año especificado.
SELECT DAY(GETDATE()) AS 'Day'; SELECT MONTH(GETDATE()) AS 'Month'; SELECT YEAR(GETDATE()) AS 'Year';
SQL Server T-SQL Code | Date Function | Result |
---|---|---|
SELECT DAY(GETDATE()) AS ‘Day’; | DAY | 8 |
SELECT MONTH(GETDATE()) AS ‘Month’; | MONTH | 3 |
SELECT YEAR(GETDATE()) AS ‘Year’; | YEAR | 2019 |
Funciones DATEFROMPARTS, DATETIME2FROMPARTS, DATETIMEFROMPARTS, DATETIMEOFFSETFROMPARTS, SMALLDATETIMEFROMPARTS y TIMEFROMPARTS de SQL Server
- DATEFROMPARTS: devuelve una fecha a partir de la fecha especificada
- DATETIME2FROMPARTS: devuelve una fecha y hora2 de la parte especificada
- DATETIMEFROMPARTS: devuelve una fecha y hora de la parte especificada
- DATETIMEOFFSETFROMPARTS: devuelve un datetimeoffset de la parte especificada
- SMALLDATETIMEFROMPARTS: devuelve una pequeña fecha y hora de la parte especificada
- TIMEFROMPARTS: devuelve un tiempo de la parte especificada
-- date and time from parts SELECT DATEFROMPARTS(2019,1,1) AS 'Date'; -- returns date SELECT DATETIME2FROMPARTS(2019,1,1,6,0,0,0,1) AS 'DateTime2'; -- returns datetime2 SELECT DATETIMEFROMPARTS(2019,1,1,6,0,0,0) AS 'DateTime'; -- returns datetime SELECT DATETIMEOFFSETFROMPARTS(2019,1,1,6,0,0,0,0,0,0) AS 'Offset'; -- returns datetimeoffset SELECT SMALLDATETIMEFROMPARTS(2019,1,1,6,0) AS 'SmallDateTime'; -- returns smalldatetime SELECT TIMEFROMPARTS(6,0,0,0,0) AS 'Time'; -- returns time
SQL Server T-SQL Code | Date Function | Result |
---|---|---|
SELECT DATEFROMPARTS(2019,1,1) AS ‘Date’; | Date | 2019-01-01 |
SELECT DATETIME2FROMPARTS(2019,1,1,6,0,0,0,1) AS ‘DateTime2’; | DateTime2 | 2019-01-01 06:00:00.0 |
SELECT DATETIMEFROMPARTS(2019,1,1,6,0,0,0) AS ‘DateTime’; | DateTime | 2019-01-01 06:00:00.000 |
SELECT DATETIMEOFFSETFROMPARTS(2019,1,1,6,0,0,0,0,0,0) AS ‘Offset’; | Offset | 2019-01-01 06:00:00 +00:00 |
SELECT SMALLDATETIMEFROMPARTS(2019,1,1,6,0) AS ‘SmallDateTime’; | SmallDateTime | 2019-01-01 06:00:00 |
SELECT TIMEFROMPARTS(6,0,0,0,0) AS ‘Time’; | Time | 06:00:00 |
Inicia 12 de Septiembre
Funciones de SQL Server DATEDIFF y DATEDIFF_BIG
- DATEDIFF: devuelve el número de fecha u hora datepart límites cruzados entre fechas especificadas como un int
- DATEDIFF_BIG: devuelve el número de límites de fecha u hora que se cruzaron entre fechas especificadas como un bigint
--Date and Time Difference SELECT DATEDIFF(DAY, 2019-31-01, 2019-01-01) AS 'DateDif' -- returns int SELECT DATEDIFF_BIG(DAY, 2019-31-01, 2019-01-01) AS 'DateDifBig' -- returns bigint
SQL Server T-SQL Code | Date Function | Result |
---|---|---|
SELECT DATEDIFF(DAY, 2019-31-01, 2019-01-01) AS ‘DateDif’ | DateDif | 30 |
SELECT DATEDIFF_BIG(DAY, 2019-31-01, 2019-01-01) AS ‘DateDifBig’ | DateDifBig | 30 |
Funciones SQL Server DATEADD, EOMONTH, SWITCHOFFSET y TODATETIMEOFFSET
- DATEADD: devuelve datepart con intervalo agregado como fecha y hora
- EOMONTH: devuelve el último día del mes de compensación como tipo de fecha_inicio
- SWITCHOFFSET: devuelve el desplazamiento de fecha y hora y el desplazamiento de zona horaria
- TODATETIMEOFFSET: devuelve la fecha y la hora con el desplazamiento de la zona horaria
-- modify date and time SELECT DATEADD(DAY,1,GETDATE()) AS 'DatePlus1'; -- returns data type of the date argument SELECT EOMONTH(GETDATE(),1) AS 'LastDayOfNextMonth'; -- returns start_date argument or date SELECT SWITCHOFFSET(GETDATE(), -6) AS 'NowMinus6'; -- returns datetimeoffset SELECT TODATETIMEOFFSET(GETDATE(), -2) AS 'Offset'; -- returns datetimeoffset
SQL Server T-SQL Code | Date Function | Result |
---|---|---|
SELECT DATEADD(DAY,1,GETDATE()) AS ‘DatePlus1’; | DatePlus1 | 2019-03-09 10:38:21.710 |
SELECT EOMONTH(GETDATE(),1) AS ‘LastDayOfNextMonth’; | LastDayOfNextMonth | 2019-04-30 |
SELECT SWITCHOFFSET(GETDATE(), -6) AS ‘NowMinus6’; | NowMinus6 | 2019-03-08 12:40:22.540 -00:06 |
SELECT TODATETIMEOFFSET(GETDATE(), -2) AS ‘Offset’; | Offset | 2019-03-08 12:46:22.540 -00:02 |
Función ISDATE de SQL Server para validar valores de fecha y hora
- ISDATE – devuelve int – Devuelve 1 si es un tipo de fecha y hora válido y 0 si no
-- validate date and time - returns int SELECT ISDATE(GETDATE()) AS 'IsDate'; SELECT ISDATE(NULL) AS 'IsDate';
SQL Server T-SQL Code | Date Function | Result |
---|---|---|
SELECT ISDATE(GETDATE()) AS ‘IsDate’; | IsDate | 1 |
SELECT ISDATE(NULL) AS ‘IsDate’; | IsDate | 0 |
Fuente: mssqltips.com