SQL: Funciones de fecha y hora con ejemplos

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 10 de Octubre

 

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 10 de Octubre

 

 

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 10 de Octubre

 

 

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 10 de Octubre

 

 

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

 

Inicia 10 de Octubre