Saltar al contenido

SQL – Funciones de fecha

octubre 19, 2021

La siguiente tabla tiene una lista de todas las funciones importantes relacionadas con la fecha y la hora disponibles a través de SQL. Hay varias otras funciones compatibles con su RDBMS. La lista dada se basa en MySQL RDBMS.

ADDDATE (fecha, INTERVAL unidad expr), ADDDATE (expr, días)

Cuando se invoca con la forma INTERVAL del segundo argumento, ADDDATE () es un sinónimo de DATE_ADD (). La función relacionada SUBDATE () es sinónimo de DATE_SUB (). Para obtener información sobre el argumento de la unidad INTERVAL, consulte la discusión sobre DATE_ADD ().

mysql> SELECT DATE_ADD('1998-01-02', INTERVAL 31 DAY);
+---------------------------------------------------------+
| DATE_ADD('1998-01-02', INTERVAL 31 DAY)                 |
+---------------------------------------------------------+
| 1998-02-02                                              |
+---------------------------------------------------------+
1 row in set (0.00 sec)

mysql> SELECT ADDDATE('1998-01-02', INTERVAL 31 DAY);
+---------------------------------------------------------+
| ADDDATE('1998-01-02', INTERVAL 31 DAY)                  |
+---------------------------------------------------------+
| 1998-02-02                                              |
+---------------------------------------------------------+
1 row in set (0.00 sec)

Cuando se invoca con la forma de días del segundo argumento, MySQL lo trata como un número entero de días que se agregarán a expr.

mysql> SELECT ADDDATE('1998-01-02', 31);
+---------------------------------------------------------+
| DATE_ADD('1998-01-02', INTERVAL 31 DAY)                 |
+---------------------------------------------------------+
| 1998-02-02                                              |
+---------------------------------------------------------+
1 row in set (0.00 sec)

ADDTIME (expr1, expr2)

ADDTIME () agrega expr2 a expr1 y devuelve el resultado. Expr1 es una expresión de hora o fecha y hora, mientras que expr2 es una expresión de hora.

mysql> SELECT ADDTIME('1997-12-31 23:59:59.999999','1 1:1:1.000002');
+---------------------------------------------------------+
| DATE_ADD('1997-12-31 23:59:59.999999','1 1:1:1.000002') |
+---------------------------------------------------------+
| 1998-01-02 01:01:01.000001                              |
+---------------------------------------------------------+
1 row in set (0.00 sec)

CONVERT_TZ (dt, from_tz, to_tz)

Esto convierte un valor de fecha y hora dt de la zona horaria dada por from_tz a la zona horaria dada por to_tz y devuelve el valor resultante. Esta función devuelve NULL si los argumentos no son válidos.

mysql> SELECT CONVERT_TZ('2004-01-01 12:00:00','GMT','MET');
+---------------------------------------------------------+
| CONVERT_TZ('2004-01-01 12:00:00','GMT','MET')           |
+---------------------------------------------------------+
| 2004-01-01 13:00:00                                     |
+---------------------------------------------------------+
1 row in set (0.00 sec)

mysql> SELECT CONVERT_TZ('2004-01-01 12:00:00','+00:00','+10:00');
+---------------------------------------------------------+
| CONVERT_TZ('2004-01-01 12:00:00','+00:00','+10:00')     |
+---------------------------------------------------------+
| 2004-01-01 22:00:00                                     |
+---------------------------------------------------------+
1 row in set (0.00 sec)

CURDATE ()

Devuelve la fecha actual como un valor en formato ‘AAAA-MM-DD’ o AAAAMMDD, dependiendo de si la función se usa en una cadena o en un contexto numérico.

mysql> SELECT CURDATE();
+---------------------------------------------------------+
| CURDATE()                                               |
+---------------------------------------------------------+
| 1997-12-15                                              |
+---------------------------------------------------------+
1 row in set (0.00 sec)

mysql> SELECT CURDATE() + 0;
+---------------------------------------------------------+
| CURDATE() + 0                                           |
+---------------------------------------------------------+
| 19971215                                                |
+---------------------------------------------------------+
1 row in set (0.00 sec)

CURRENT_DATE y CURRENT_DATE ()

CURRENT_DATE y CURRENT_DATE () son sinónimos de CURDATE ()

CURTIME ()

Devuelve la hora actual como un valor en formato ‘HH: MM: SS’ o HHMMSS, dependiendo de si la función se usa en una cadena o en un contexto numérico. El valor se expresa en la zona horaria actual.

mysql> SELECT CURTIME();
+---------------------------------------------------------+
| CURTIME()                                               |
+---------------------------------------------------------+
| 23:50:26                                                |
+---------------------------------------------------------+
1 row in set (0.00 sec)

mysql> SELECT CURTIME() + 0;
+---------------------------------------------------------+
| CURTIME() + 0                                           |
+---------------------------------------------------------+
| 235026                                                  |
+---------------------------------------------------------+
1 row in set (0.00 sec)

CURRENT_TIME y CURRENT_TIME ()

CURRENT_TIME y CURRENT_TIME () son sinónimos de CURTIME ().

CURRENT_TIMESTAMP y CURRENT_TIMESTAMP ()

CURRENT_TIMESTAMP y CURRENT_TIMESTAMP () son sinónimos de NOW ().

FECHA (expr)

Extrae la parte de fecha de la expresión de fecha o fecha y hora expr.

mysql> SELECT DATE('2003-12-31 01:02:03');
+---------------------------------------------------------+
| DATE('2003-12-31 01:02:03')                             |
+---------------------------------------------------------+
|  2003-12-31                                             |
+---------------------------------------------------------+
1 row in set (0.00 sec)

DATEDIFF (expr1, expr2)

DATEDIFF () devuelve expr1. expr2 expresado como un valor en días de una fecha a la otra. Tanto expr1 como expr2 son expresiones de fecha o de fecha y hora. En el cálculo solo se utilizan las partes de fecha de los valores.

mysql> SELECT DATEDIFF('1997-12-31 23:59:59','1997-12-30');
+---------------------------------------------------------+
| DATEDIFF('1997-12-31 23:59:59','1997-12-30')            |
+---------------------------------------------------------+
| 1                                                       |
+---------------------------------------------------------+
1 row in set (0.00 sec)

DATE_ADD (fecha, INTERVAL unidad expr), DATE_SUB (fecha, INTERVAL unidad expr)

Estas funciones realizan aritmética de fechas. los fecha es un valor DATETIME o DATE que especifica la fecha de inicio. los expr es una expresión que especifica el valor del intervalo que se sumará o restará de la fecha de inicio. El expr es una cadena; puede comenzar con un ‘-‘ para intervalos negativos.

A unidad es una palabra clave que indica las unidades en las que se debe interpretar la expresión.

los INTERVALO La palabra clave y el especificador de unidad no distinguen entre mayúsculas y minúsculas.

La siguiente tabla muestra la forma esperada del argumento expr para cada valor unitario.

valor unitario ExprFormat esperado
MICROSEGUNDO MICROSECONDS
SEGUNDO SEGUNDOS
MINUTO MINUTOS
HORA HORAS
DÍA DIAS
SEMANA SEMANAS
MES MESES
CUARTO CUARTELES
AÑO AÑOS
SECOND_MICROSECOND ‘SECONDS.MICROSECONDS’
MINUTE_MICROSECOND ‘MINUTOS.MICROSECONDS’
MINUTE_SECOND ‘MINUTOS: SEGUNDOS’
HOUR_MICROSECOND ‘HORAS.MICROSECONDOS’
HOUR_SECOND ‘HORAS: MINUTOS: SEGUNDOS’
HOUR_MINUTE ‘HORAS: MINUTOS’
DAY_MICROSECOND ‘DÍAS.MICROSECONDOS’
DAY_SECOND ‘DÍAS HORAS: MINUTOS: SEGUNDOS’
DAY_MINUTE ‘DÍAS HORAS: MINUTOS’
DAY_HOUR ‘DÍAS HORAS’
AÑO MES ‘AÑOS-MESES’

Los valores CUARTO y SEMANA están disponibles en MySQL 5.0.0. versión.

mysql> SELECT DATE_ADD('1997-12-31 23:59:59', 
   -> INTERVAL '1:1' MINUTE_SECOND);
+---------------------------------------------------------+
| DATE_ADD('1997-12-31 23:59:59', INTERVAL...             |
+---------------------------------------------------------+
| 1998-01-01 00:01:00                                     |
+---------------------------------------------------------+
1 row in set (0.00 sec)

mysql> SELECT DATE_ADD('1999-01-01', INTERVAL 1 HOUR);
+---------------------------------------------------------+
| DATE_ADD('1999-01-01', INTERVAL 1 HOUR)                 |
+---------------------------------------------------------+
| 1999-01-01 01:00:00                                     |
+---------------------------------------------------------+
1 row in set (0.00 sec)

DATE_FORMAT (fecha, formato)

Este comando formatea el valor de la fecha según la cadena de formato.

Los siguientes especificadores pueden usarse en la cadena de formato. Se requiere el carácter ‘%’ antes de los caracteres del especificador de formato.

No Señor. Especificador y descripción
1

%a

Nombre abreviado del día de la semana (dom .. sábado)

2

%B

Nombre del mes abreviado (enero … diciembre)

3

%C

Mes, numérico (0..12)

4

%D

Día del mes con sufijo en inglés (0, 1, 2, 3,.)

5

%D

Día del mes, numérico (00..31)

6

%mi

Día del mes, numérico (0..31)

7

%F

Microsegundos (000000..999999)

8

% H

Hora (00..23)

9

% h

Hora (01..12)

10

%I

Hora (01..12)

11

%I

Minutos, numéricos (00..59)

12

% j

Día del año (001..366)

13

% k

Hora (0..23)

14

% l

Hora (1..12)

15

%METRO

Nombre del mes (enero … diciembre)

dieciséis

%metro

Mes, numérico (00..12)

17

%pag

Am o PM

18

% r

Hora, 12 horas (hh: mm: ss seguido de AM o PM)

19

%S

Segundos (00..59)

20

%s

Segundos (00..59)

21

% T

Hora, 24 horas (hh: mm: ss)

22

% U

Semana (00..53), donde el domingo es el primer día de la semana

23

% u

Semana (00..53), donde el lunes es el primer día de la semana

24

% V

Semana (01..53), donde el domingo es el primer día de la semana; usado con% X

25

% v

Semana (01..53), donde el lunes es el primer día de la semana; usado con% x

26

% W

Nombre del día de la semana (domingo … sábado)

27

% w

Día de la semana (0 = domingo..6 = sábado)

28

%X

Año de la semana donde el domingo es el primer día de la semana, numérico, cuatro dígitos; usado con% V

29

%X

Año de la semana, donde el lunes es el primer día de la semana, numérico, cuatro dígitos; usado con% v

30

% Y

Año, numérico, cuatro dígitos

31

% y

Año, numérico (dos dígitos)

32

%%

Un.% Literal. personaje

33

%X

x, para cualquier x. no enumerado arriba

mysql> SELECT DATE_FORMAT('1997-10-04 22:23:00', '%W %M %Y');
+---------------------------------------------------------+
| DATE_FORMAT('1997-10-04 22:23:00', '%W %M %Y')          |
+---------------------------------------------------------+
| Saturday October 1997                                   |
+---------------------------------------------------------+
1 row in set (0.00 sec)

mysql> SELECT DATE_FORMAT('1997-10-04 22:23:00'
   -> '%H %k %I %r %T %S %w');
+---------------------------------------------------------+
| DATE_FORMAT('1997-10-04 22:23:00.......                 |
+---------------------------------------------------------+
|  22 22 10 10:23:00 PM 22:23:00 00 6                     |
+---------------------------------------------------------+
1 row in set (0.00 sec)

DATE_SUB (fecha, INTERVAL expr unidad)

Esto es similar a la función DATE_ADD ().

DÍA (fecha)

DAY () es un sinónimo de la función DAYOFMONTH ().

DAYNAME (fecha)

Devuelve el nombre del día de la semana para la fecha.

mysql> SELECT DAYNAME('1998-02-05');
+---------------------------------------------------------+
| DAYNAME('1998-02-05')                                   |
+---------------------------------------------------------+
| Thursday                                               ...
close