SQL – Funciones de fecha
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 soportadas por su RDBMS. La lista dada se basa en MySQL RDBMS.
Sr.No. | Función & Descripción | ||
---|---|---|---|
1 | ADDDATE()
Agrega fechas |
2 | ADDTIME()
Agrega tiempo |
3 | CONVERT_TZ()
Convierte de una zona horaria a otra |
4 | CURDATE()
Devuelve la fecha actual |
5 | CURRENT_DATE(), CURRENT_DATE
Sinónimos de CURDATE() |
6 | CURRENT_TIME(), CURRENT_TIME
Sinónimos de CURTIME() |
||
7 | CURRENT_TIMESTAMP(), CURRENT_TIMESTAMP
Sinónimos de NOW() |
||
8 | CURTIME()
Devuelve la hora actual |
9 | DATE_ADD()
Agrega dos fechas |
10 | DATE_FORMAT()
Formatea la fecha como se especifica |
||
11 | DATE_SUB()
Sustrae dos fechas |
||
12 | DATE()
Extrae la parte de la fecha de una expresión de fecha o datetime |
13 | DATEDIFF()
Resta dos fechas |
14 | DAY()
Sinónimo de de DAYOFMONTH() |
||
15 | DAYNAME()
Devuelve el nombre del día de la semana |
||
16 | DAYOFMONTH()
Devuelve el día del mes (1-31) |
||
17 | DAYOFWEEK()
Devuelve el índice del día de la semana del argumento |
||
18 | DAYOFYEAR()
Devuelve el día del año (1-366) |
||
19 | EXTRACT
Extrae parte de una fecha |
||
20 | FROM_DAYS()
Convierte un número de día en una fecha |
21 | FROM_UNIXTIME()
Formatea la fecha como una marca de tiempo UNIX |
22 | HOUR()
Extrae la hora |
23 | LAST_DAY
Devuelve el último día del mes para el argumento |
24 | LOCALTIME(), LOCALTIME
Sinónimo de NOW() |
25 | LOCALTIMESTAMP, LOCALTIMESTAMP()
Sinónimo de NOW() |
26 | MAKEDATE()
Crea una fecha a partir del año y el día del año |
||
27 | MAKETIME
MAKETIME() |
28 | MICROSECOND()
Devuelve los microsegundos del argumento |
29 | MINUTO()
Devuelve el minuto del argumento |
30 | MES()
Devuelve el mes de la fecha pasada |
31 | MONTHNAME()
Devuelve el nombre del mes |
32 | NOW()
Devuelve la fecha y hora actuales y la hora |
33 | PERIOD_ADD()
Agrega un período a un año-mes |
||
34 | PERIOD_DIFF()
Devuelve el número de meses entre períodos |
||
35 | TRIMESTRE()
Devuelve el trimestre a partir de un argumento de fecha |
||
36 | SEC_TO_TIME()
Convierte los segundos a ‘HH:MM:SS’ formato |
37 | SECOND()
Devuelve el segundo (0-59) |
38 | STR_TO_DATE()
Convierte una cadena en una fecha |
39 | SUBDATE()
Cuando se invoca con tres argumentos es un sinónimo de DATE_SUB() |
40 | SUBTIME()
Sustrae tiempos |
||
41 | SYSDATE()
Devuelve la hora a la que se ejecuta la función |
||
42 | TIME_FORMAT()
Formatea como tiempo |
||
43 | TIME_TO_SEC()
Devuelve el argumento convertido a segundos |
44 | TIME()
Extrae la parte de tiempo de la expresión pasada |
45 | TIMEDIFF()
Resta el tiempo |
46 | TIMESTAMP()
Con un solo argumento esta función devuelve la expresión de fecha o datetime. Con dos argumentos, la suma de los argumentos |
TIMESTAMPADD()
Agrega un intervalo a una expresión datetime expresión |
|
48 | TIMESTAMPDIFF()
Resta un intervalo de una expresión datetime |
||
TO_DAYS()
Devuelve el argumento de la fecha convertido a días |
|||
50 | UNIX_TIMESTAMP()
Devuelve una marca de tiempo UNIX |
||
51 | UTC_DATE()
Devuelve la fecha UTC actual |
52 | UTC_TIME()
Devuelve la hora UTC actual actual |
53 | UTC_TIMESTAMP()
Devuelve la fecha y hora UTC actuales |
54 | WEEK()
Devuelve el número de semana |
55 | WEEKDAY()
Devuelve el índice del día de la semana |
56 | WEEKOFYEAR()
Devuelve la semana natural de la fecha (1-53) |
57 | YEAR()
Devuelve el año |
||
58 | YEARWEEK()
Devuelve el año y la semana |
ADDDATE(date,INTERVALO expr unidad), ADDDATE(expr,days)
Cuando se invoca con la forma INTERVALO del segundo argumento, ADDDATE() es un sinónimo de DATE_ADD(). La función relacionada SUBDATE() es un sinónimo de DATE_SUB(). Para información sobre el argumento de la unidad INTERVALO, vea la discusión para 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 a añadir 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() añade expr2 a expr1 y devuelve el resultado. El expr1 es una expresión de tiempo o datetime, mientras que el expr2 es una expresión de tiempo.
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)
Convierte un valor datetime 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 ‘YYYY-MM-DD’ o YYYMMDD, dependiendo de si la función se utiliza 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 en formato HHMMSS, dependiendo de si la función se utiliza 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().
DATE(expr)
Extrae la parte de fecha de la expresión de fecha o datetime 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. Sólo las partes de fecha de los valores se utilizan en el cálculo.
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,INTERVALO expr unidad), DATE_SUB(fecha,INTERVALO expr unidad)
Estas funciones realizan aritmética de fechas. La fecha es un valor DATETIME o DATE que especifica la fecha inicial. El expr es una expresión que especifica el valor del intervalo que se debe sumar o restar a la fecha inicial. El expr es una cadena; puede comenzar con un ‘-‘ para intervalos negativos.
Una unidad es una palabra clave que indica las unidades en las que debe interpretarse la expresión.
La palabra clave INTERVAL 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 de unidad.
Valor de la unidad | Formato expr esperado | ||
---|---|---|---|
MICROSEGUNDO | MICROSEGUNDOS | ||
Segundos | Segundos | Minutos | Minutos | HORA | HORAS | DÍA | Días | Semana | Semanas | Meses |
QUARTER | QUARTERS | ||
YEARS | YEARS | ||
SECOND_MICROSECOND | ‘SECONDS.MICROSEGUNDOS’ | MINUTO_MICROSEGUNDOS | ‘MINUTOS.MICROSEGUNDOS’ | MINUTO_SECOND | ‘MINUTOS:SEGUNDOS’ | HORA_MICROSEGUNDOS | ‘HORAS.MICROSEGUNDOS’ | HORA_SECONDIO | ‘HORAS:MINUTOS:SEGUNDOS’ | HORA_MINUTO | ‘HORAS:MINUTOS’ |
DÍA_MICROSEGUNDIO | ‘DÍAS.MICROSEGUNDOS’ | DÍA_SECONDIO | ‘DÍAS HORAS:MINUTOS:SEGUNDOS’ | DÍA_MINUTO | ‘DÍAS HORAS:MINUTOS’ | DÍA_HORA | ‘DÍAS-HORA’ |
AÑO_MES | ‘AÑOS-MESES’ |
Los valores TRIMESTRE y SEMANA están disponibles desde la versión MySQL 5.0.0.
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(date,format)
Este comando formatea el valor de la fecha según la cadena de formato.
Se pueden utilizar los siguientes especificadores en la cadena de formato. Se requiere el carácter ‘%’ antes de los caracteres del especificador de formato.
Sr.No. | Especificador & Descripción |
---|---|
1 | 2 | 3 |
%c Mes, numérico (0..12) |
4 | |
5 | |
6 | 7 |
8 |
%H Hora (00..23) |
9 | %h
Hora (01..12) |
10
%I Hora (01..12) |
11
%i Minutos, numérico (00..59) |
12 | 13 |
Hora (0..23) |
14
%l Hora (1..12) |
15 | 16 |
17 | |
18 | |
19 |
%S Segundos (00..59) |
20 |
%s Segundos (00..59) |
21 | |
22 |
%U Semana (00..53), donde el domingo es el primer día de la semana |
23 | 24 |
25 |
%v Semana (01..53), donde el lunes es el primer día de la semana; se utiliza con %x |
26 |
%W Nombre del día de la semana (domingo..sábado) |
27 |
28 |
Año de la semana donde el domingo es el primer día de la semana, numérico, cuatro dígitos; utilizado con %V |
%x Año para la semana, donde el lunes es el primer día de la semana, numérico, cuatro dígitos; se utiliza con %v |
30 |
Año Año, numérico, cuatro dígitos |
31 | |
%% Un literal .%. carácter |
|
33 |
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(date,INTERVAL expr unit)
Esto es similar a la función DATE_ADD().
DAY(fecha)
El DAY() es un sinónimo de la función DAYOFMONTH().
NOMBRE DEL DÍA(fecha)
Devuelve el nombre del día de la semana para la fecha.
mysql> SELECT DAYNAME('1998-02-05');+---------------------------------------------------------+| DAYNAME('1998-02-05') |+---------------------------------------------------------+| Thursday |+---------------------------------------------------------+1 row in set (0.00 sec)
DAYOFMONTH(fecha)
Devuelve el día del mes para la fecha, en el rango de 0 a 31.
mysql> SELECT DAYOFMONTH('1998-02-03');+---------------------------------------------------------+| DAYOFMONTH('1998-02-03') |+---------------------------------------------------------+| 3 |+---------------------------------------------------------+1 row in set (0.00 sec)
DAYOFWEEK(date)
Devuelve el índice del día de la semana para la fecha (1 = domingo, 2 = lunes, ., 7 = sábado). Estos valores de índice corresponden al estándar ODBC.
mysql> SELECT DAYOFWEEK('1998-02-03');+---------------------------------------------------------+|DAYOFWEEK('1998-02-03') |+---------------------------------------------------------+| 3 |+---------------------------------------------------------+1 row in set (0.00 sec)
DAYOFYEAR(date)
Devuelve el día del año para la fecha, en el rango de 1 a 366.
mysql> SELECT DAYOFYEAR('1998-02-03');+---------------------------------------------------------+| DAYOFYEAR('1998-02-03') |+---------------------------------------------------------+| 34 |+---------------------------------------------------------+1 row in set (0.00 sec)
EXTRACT(unit FROM date)
La función EXTRACT() utiliza los mismos tipos de especificadores de unidades que DATE_ADD() o DATE_SUB(), pero extrae partes de la fecha en lugar de realizar la aritmética de la fecha.
mysql> SELECT EXTRACT(YEAR FROM '1999-07-02');+---------------------------------------------------------+| EXTRACT(YEAR FROM '1999-07-02') |+---------------------------------------------------------+| 1999 |+---------------------------------------------------------+1 row in set (0.00 sec)mysql> SELECT EXTRACT(YEAR_MONTH FROM '1999-07-02 01:02:03');+---------------------------------------------------------+| EXTRACT(YEAR_MONTH FROM '1999-07-02 01:02:03') |+---------------------------------------------------------+| 199907 |+---------------------------------------------------------+1 row in set (0.00 sec)
FROM_DAYS(N)
Dado un número de día N, devuelve un valor de FECHA.
mysql> SELECT FROM_DAYS(729669);+---------------------------------------------------------+| FROM_DAYS(729669) |+---------------------------------------------------------+| 1997-10-07 |+---------------------------------------------------------+1 row in set (0.00 sec)
Nota – Utilice FROM_DAYS() con precaución en fechas antiguas. No está pensada para su uso con valores anteriores a la llegada del calendario gregoriano (1582).
FROM_UNIXTIME(unix_timestamp,format)
Devuelve una representación del argumento unix_timestamp como un valor en formato ‘YYYY-MM-DD HH:MM:SS o YYYMMDDHHMMSS, dependiendo de si la función se utiliza en una cadena o en un contexto numérico. El valor se expresa en la zona horaria actual. El argumento unix_timestamp es un valor de marca de tiempo interno, que es producido por la función UNIX_TIMESTAMP().
Si se da el formato, el resultado se formatea según la cadena de formato, que se utiliza de la misma manera que se indica en la entrada de la función DATE_FORMAT().
mysql> SELECT FROM_UNIXTIME(875996580);+---------------------------------------------------------+| FROM_UNIXTIME(875996580) |+---------------------------------------------------------+| 1997-10-04 22:23:00 |+---------------------------------------------------------+1 row in set (0.00 sec)
HOUR(time)
Devuelve la hora para el tiempo. El rango del valor devuelto es de 0 a 23 para los valores de la hora. Sin embargo, el rango de los valores de HORA es en realidad mucho mayor, por lo que HOUR puede devolver valores mayores que 23.
mysql> SELECT HOUR('10:05:03');+---------------------------------------------------------+| HOUR('10:05:03') |+---------------------------------------------------------+| 10 |+---------------------------------------------------------+1 row in set (0.00 sec)
LAST_DAY(date)
Toma un valor de fecha o datetime y devuelve el valor correspondiente al último día del mes. Devuelve NULL si el argumento no es válido.
mysql> SELECT LAST_DAY('2003-02-05');+---------------------------------------------------------+| LAST_DAY('2003-02-05') |+---------------------------------------------------------+| 2003-02-28 |+---------------------------------------------------------+1 row in set (0.00 sec)
LOCALTIME y LOCALTIME()
LOCALTIME y LOCALTIME() son sinónimos de NOW().
LOCALTIMESTAMP y LOCALTIMESTAMP()
LOCALTIMESTAMP y LOCALTIMESTAMP() son sinónimos de NOW().
MAKEDATE(year,dayofyear)
Devuelve una fecha, dados los valores de year y day-of-year. El valor de dayofyear debe ser mayor que 0 o el resultado será NULL.
mysql> SELECT MAKEDATE(2001,31), MAKEDATE(2001,32);+---------------------------------------------------------+| MAKEDATE(2001,31), MAKEDATE(2001,32) |+---------------------------------------------------------+| '2001-01-31', '2001-02-01' |+---------------------------------------------------------+1 row in set (0.00 sec)
MAKETIME(hour,minute,second)
Devuelve un valor de tiempo calculado a partir de los argumentos hour, minute y second.
mysql> SELECT MAKETIME(12,15,30);+---------------------------------------------------------+| MAKETIME(12,15,30) |+---------------------------------------------------------+| '12:15:30' |+---------------------------------------------------------+1 row in set (0.00 sec)
MICROSEGUNDOS(expr)
Devuelve los microsegundos de la expresión de tiempo o fecha (expr) como un número en el rango de 0 a 999999.
mysql> SELECT MICROSECOND('12:00:00.123456');+---------------------------------------------------------+| MICROSECOND('12:00:00.123456') |+---------------------------------------------------------+| 123456 |+---------------------------------------------------------+1 row in set (0.00 sec)
MINUTO(tiempo)
Devuelve el minuto para el tiempo, en el rango de 0 a 59.
mysql> SELECT MINUTE('98-02-03 10:05:03');+---------------------------------------------------------+| MINUTE('98-02-03 10:05:03') |+---------------------------------------------------------+| 5 |+---------------------------------------------------------+1 row in set (0.00 sec)
MES(fecha)
Devuelve el mes para la fecha, en el rango de 0 a 12.
mysql> SELECT MONTH('1998-02-03')+---------------------------------------------------------+| MONTH('1998-02-03') |+---------------------------------------------------------+| 2 |+---------------------------------------------------------+1 row in set (0.00 sec)
MONTHNAME(fecha)
Devuelve el nombre completo del mes para una fecha.
mysql> SELECT MONTHNAME('1998-02-05');+---------------------------------------------------------+| MONTHNAME('1998-02-05') |+---------------------------------------------------------+| February |+---------------------------------------------------------+1 row in set (0.00 sec)
NOW()
Devuelve la fecha y la hora actuales como un valor en formato ‘YYYY-MM-DD HH:MM:SS’ o YYYMMDDHHMMSS, dependiendo de si la función se utiliza en un contexto de cadena o numérico. Este valor se expresa en la zona horaria actual.
mysql> SELECT NOW();+---------------------------------------------------------+| NOW() |+---------------------------------------------------------+| 1997-12-15 23:50:26 |+---------------------------------------------------------+1 row in set (0.00 sec)
PERIOD_ADD(P,N)
Agrega N meses a un período P (en el formato AAMM o AAAAMM). Devuelve un valor en el formato AAAAMM. Tenga en cuenta que el argumento del período P no es un valor de fecha.
mysql> SELECT PERIOD_ADD(9801,2);+---------------------------------------------------------+| PERIOD_ADD(9801,2) |+---------------------------------------------------------+| 199803 |+---------------------------------------------------------+1 row in set (0.00 sec)
PERIOD_DIFF(P1,P2)
Devuelve el número de meses entre los períodos P1 y P2. Estos períodos P1 y P2 deben estar en el formato YYMM o YYYYMM. Tenga en cuenta que los argumentos de período P1 y P2 no son valores de fecha.
mysql> SELECT PERIOD_DIFF(9802,199703);+---------------------------------------------------------+| PERIOD_DIFF(9802,199703) |+---------------------------------------------------------+| 11 |+---------------------------------------------------------+1 row in set (0.00 sec)
QUARTER(date)
Devuelve el trimestre del año para la fecha, en el rango 1 a 4.
mysql> SELECT QUARTER('98-04-01');+---------------------------------------------------------+| QUARTER('98-04-01') |+---------------------------------------------------------+| 2 |+---------------------------------------------------------+1 row in set (0.00 sec)
SECOND(time)
Devuelve el segundo para la hora, en el rango de 0 a 59.
mysql> SELECT SECOND('10:05:03');+---------------------------------------------------------+| SECOND('10:05:03') |+---------------------------------------------------------+| 3 |+---------------------------------------------------------+1 row in set (0.00 sec)
SEC_TO_TIME(seconds)
Devuelve el argumento de los segundos, convertido a horas, minutos y segundos, como un valor en formato ‘HH:MM:SS’ o HHMMSS, dependiendo de si la función se utiliza en un contexto de cadena o numérico.
mysql> SELECT SEC_TO_TIME(2378);+---------------------------------------------------------+| SEC_TO_TIME(2378) |+---------------------------------------------------------+| 00:39:38 |+---------------------------------------------------------+1 row in set (0.00 sec)
STR_TO_DATE(str,format)
Es la inversa de la función DATE_FORMAT(). Toma una cadena str y una cadena format. La función STR_TO_DATE() devuelve un valor DATETIME si la cadena de formato contiene partes de fecha y hora. De lo contrario, devuelve un valor DATE o TIME si la cadena contiene sólo partes de fecha u hora.
mysql> SELECT STR_TO_DATE('04/31/2004', '%m/%d/%Y');+---------------------------------------------------------+| STR_TO_DATE('04/31/2004', '%m/%d/%Y') |+---------------------------------------------------------+| 2004-04-31 |+---------------------------------------------------------+1 row in set (0.00 sec)
SUBDATE(date,INTERVAL expr unit) y SUBDATE(expr,days)
Cuando se invoca con la forma INTERVAL del segundo argumento, SUBDATE() es un sinónimo de DATE_SUB(). Para obtener información sobre el argumento de la unidad INTERVALO, consulte la discusión para DATE_ADD().
mysql> SELECT DATE_SUB('1998-01-02', INTERVAL 31 DAY);+---------------------------------------------------------+| DATE_SUB('1998-01-02', INTERVAL 31 DAY) |+---------------------------------------------------------+| 1997-12-02 |+---------------------------------------------------------+1 row in set (0.00 sec)mysql> SELECT SUBDATE('1998-01-02', INTERVAL 31 DAY);+---------------------------------------------------------+| SUBDATE('1998-01-02', INTERVAL 31 DAY) |+---------------------------------------------------------+| 1997-12-02 |+---------------------------------------------------------+1 row in set (0.00 sec)
SUBTIME(expr1,expr2)
La función SUBTIME() devuelve expr1 . expr2 expresado como un valor en el mismo formato que expr1. El valor de expr1 es una expresión de tiempo o de fecha, mientras que el valor de expr2 es una expresión de tiempo.
mysql> SELECT SUBTIME('1997-12-31 23:59:59.999999', -> '1 1:1:1.000002');+---------------------------------------------------------+| SUBTIME('1997-12-31 23:59:59.999999'... |+---------------------------------------------------------+| 1997-12-30 22:58:58.999997 |+---------------------------------------------------------+1 row in set (0.00 sec)
SYSDATE()
Devuelve la fecha y la hora actuales como un valor en formato ‘YYYY-MM-DD HH:MM:SS’ o YYYYMMDDHHMMSS, dependiendo de si la función se utiliza en una cadena o en un contexto numérico.
mysql> SELECT SYSDATE();+---------------------------------------------------------+| SYSDATE() |+---------------------------------------------------------+| 2006-04-12 13:47:44 |+---------------------------------------------------------+1 row in set (0.00 sec)
TIME(expr)
Extrae la parte de tiempo de la expresión de tiempo o fecha expr y la devuelve como una cadena.
mysql> SELECT TIME('2003-12-31 01:02:03');+---------------------------------------------------------+| TIME('2003-12-31 01:02:03') |+---------------------------------------------------------+| 01:02:03 |+---------------------------------------------------------+1 row in set (0.00 sec)
TIMEDIFF(expr1,expr2)
La función TIMEDIFF() devuelve expr1 . expr2 expresados como un valor de tiempo. Estos valores expr1 y expr2 son expresiones de tiempo o de fecha y hora, pero ambas deben ser del mismo tipo.
mysql> SELECT TIMEDIFF('1997-12-31 23:59:59.000001', -> '1997-12-30 01:01:01.000002');+---------------------------------------------------------+| TIMEDIFF('1997-12-31 23:59:59.000001'..... |+---------------------------------------------------------+| 46:58:57.999999 |+---------------------------------------------------------+1 row in set (0.00 sec)
TIMESTAMP(expr), TIMESTAMP(expr1,expr2)
Con un solo argumento, esta función devuelve la expresión de fecha o fecha y hora expr como un valor de fecha y hora. Con dos argumentos, añade la expresión de tiempo expr2 a la fecha o expresión datetime expr1 y devuelve el resultado como un valor datetime.
mysql> SELECT TIMESTAMP('2003-12-31');+---------------------------------------------------------+| TIMESTAMP('2003-12-31') |+---------------------------------------------------------+| 2003-12-31 00:00:00 |+---------------------------------------------------------+1 row in set (0.00 sec)
TIMESTAMPADD(unit,interval,datetime_expr)
Esta función añade la expresión entera interval a la fecha o expresión datetime_expr. La unidad para el intervalo viene dada por el argumento unit, que debe ser uno de los siguientes valores –
- FRAC_SECOND
- SECOND, MINUTE
- HOUR, DÍA
- SEMANA
- MESES
- CUARTO o
- AÑO
El valor de la unidad puede especificarse utilizando una de las palabras clave como se muestra o con un prefijo de SQL_TSI_.
Por ejemplo, DAY y SQL_TSI_DAY son legales.
mysql> SELECT TIMESTAMPADD(MINUTE,1,'2003-01-02');+---------------------------------------------------------+| TIMESTAMPADD(MINUTE,1,'2003-01-02') |+---------------------------------------------------------+| 2003-01-02 00:01:00 |+---------------------------------------------------------+1 row in set (0.00 sec)
TIMESTAMPDIFF(unit,datetime_expr1,datetime_expr2)
Devuelve la diferencia entera entre las expresiones datetime_expr1 y datetime_expr2. La unidad del resultado viene dada por el argumento unidad. Los valores legales para la unidad son los mismos que los enumerados en la descripción de la función TIMESTAMPADD().
mysql> SELECT TIMESTAMPDIFF(MONTH,'2003-02-01','2003-05-01');+---------------------------------------------------------+| TIMESTAMPDIFF(MONTH,'2003-02-01','2003-05-01') |+---------------------------------------------------------+| 3 |+---------------------------------------------------------+1 row in set (0.00 sec)
TIME_FORMAT(time,format)
Esta función se utiliza como la función DATE_FORMAT(), pero la cadena de formato puede contener especificadores de formato sólo para horas, minutos y segundos.
Si el valor de la hora contiene una parte de hora que es mayor que 23, los especificadores de formato de hora %H y %k producen un valor mayor que el rango habitual de 0 a 23. Los otros especificadores de formato de hora producen el valor de la hora módulo 12.
mysql> SELECT TIME_FORMAT('100:00:00', '%H %k %h %I %l');+---------------------------------------------------------+| TIME_FORMAT('100:00:00', '%H %k %h %I %l') |+---------------------------------------------------------+| 100 100 04 04 4 |+---------------------------------------------------------+1 row in set (0.00 sec)
TIME_TO_SEC(time)
Devuelve el argumento de la hora convertido a segundos.
mysql> SELECT TIME_TO_SEC('22:23:00');+---------------------------------------------------------+| TIME_TO_SEC('22:23:00') |+---------------------------------------------------------+| 80580 |+---------------------------------------------------------+1 row in set (0.00 sec)
TO_DAYS(date)
Dada una fecha, devuelve un número de día (el número de días desde el año 0).
mysql> SELECT TO_DAYS(950501);+---------------------------------------------------------+| TO_DAYS(950501) |+---------------------------------------------------------+| 728779 |+---------------------------------------------------------+1 row in set (0.00 sec)
UNIX_TIMESTAMP(), UNIX_TIMESTAMP(date)
Si se llama sin argumento, esta función devuelve una marca de tiempo Unix (segundos desde ‘1970-01-01 00:00:00’ UTC) como un entero sin signo. Si se llama a UNIX_TIMESTAMP() con un argumento de fecha, devuelve el valor del argumento como segundos desde ‘1970-01-01 00:00:00’ UTC. La fecha puede ser una cadena de FECHA, una cadena de FECHA, un TIMESTAMP, o un número en el formato YYMMDD o YYYMMDD.
mysql> SELECT UNIX_TIMESTAMP();+---------------------------------------------------------+| UNIX_TIMESTAMP() |+---------------------------------------------------------+| 882226357 |+---------------------------------------------------------+1 row in set (0.00 sec)mysql> SELECT UNIX_TIMESTAMP('1997-10-04 22:23:00');+---------------------------------------------------------+| UNIX_TIMESTAMP('1997-10-04 22:23:00') |+---------------------------------------------------------+| 875996580 |+---------------------------------------------------------+1 row in set (0.00 sec)
UTC_DATE, UTC_DATE()
Devuelve la fecha UTC actual como un valor en formato ‘YYYY-MM-DD’ o YYYMMDD, dependiendo de si la función se utiliza en un contexto de cadena o numérico.
mysql> SELECT UTC_DATE(), UTC_DATE() + 0;+---------------------------------------------------------+| UTC_DATE(), UTC_DATE() + 0 |+---------------------------------------------------------+| 2003-08-14, 20030814 |+---------------------------------------------------------+1 row in set (0.00 sec)
UTC_TIME, UTC_TIME()
Devuelve la hora UTC actual como un valor en formato ‘HH:MM:SS’ o HHMMSS, dependiendo de si la función se utiliza en un contexto de cadena o numérico.
mysql> SELECT UTC_TIME(), UTC_TIME() + 0;+---------------------------------------------------------+| UTC_TIME(), UTC_TIME() + 0 |+---------------------------------------------------------+| 18:07:53, 180753 |+---------------------------------------------------------+1 row in set (0.00 sec)
UTC_TIMESTAMP, UTC_TIMESTAMP()
Devuelve la fecha y hora UTC actual como un valor en ‘YYYY-MM-DD HH:MM:SS’ o en un formato YYYYMMDDHHMMSS, dependiendo de si la función se utiliza en un contexto de cadena o numérico.
mysql> SELECT UTC_TIMESTAMP(), UTC_TIMESTAMP() + 0;+---------------------------------------------------------+| UTC_TIMESTAMP(), UTC_TIMESTAMP() + 0 |+---------------------------------------------------------+| 2003-08-14 18:08:04, 20030814180804 |+---------------------------------------------------------+1 row in set (0.00 sec)
WEEK(date)
Esta función devuelve el número de semana de la fecha. La forma de dos argumentos de WEEK() permite especificar si la semana empieza en domingo o en lunes y si el valor de retorno debe estar en el rango de 0 a 53 o de 1 a 53. Si se omite el argumento mode se utiliza el valor de la variable del sistema default_week_format
Modo | Primer día de la semana | Rango | La semana 1 es la primera semana. |
---|---|---|---|
0 | Domingo | 0-53 | con un domingo en este año |
1 | Lunes | 0-53 | con más de 3 días este año |
2 | Domingo | 1-53 | con un domingo en este año | 3 | Lunes | 1-53 | con más de 3 días este año |
4 | Domingo | 0-53 | con más de 3 días este año | 5 | Lunes | 0-53 | con un lunes en este año | 6 | Domingo | 1-53 | con más de 3 días este año |
7 | Lunes | 1-53 | con un lunes en este año |
mysql> SELECT WEEK('1998-02-20');+---------------------------------------------------------+| WEEK('1998-02-20') |+---------------------------------------------------------+| 7 |+---------------------------------------------------------+1 row in set (0.00 sec)
WEEKDAY(date)
Devuelve el índice de días de la semana para la fecha (0 = lunes, 1 = martes, . 6 = domingo).
mysql> SELECT WEEKDAY('1998-02-03 22:23:00');+---------------------------------------------------------+| WEEKDAY('1998-02-03 22:23:00') |+---------------------------------------------------------+| 1 |+---------------------------------------------------------+1 row in set (0.00 sec)
WEEKOFYEAR(date)
Devuelve la semana natural de la fecha como un número en el rango de 1 a 53. WEEKOFYEAR() es una función de compatibilidad que equivale a WEEK(date,3).
mysql> SELECT WEEKOFYEAR('1998-02-20');+---------------------------------------------------------+| WEEKOFYEAR('1998-02-20') |+---------------------------------------------------------+| 8 |+---------------------------------------------------------+1 row in set (0.00 sec)
YEAR(date)
Devuelve el año de la fecha, en el rango 1000 a 9999, o 0 para el .zero. date.
mysql> SELECT YEAR('98-02-03');+---------------------------------------------------------+| YEAR('98-02-03') |+---------------------------------------------------------+| 1998 |+---------------------------------------------------------+1 row in set (0.00 sec)
YEARWEEK(date), YEARWEEK(date,mode)
Devuelve el año y la semana para una fecha. El argumento modo funciona exactamente igual que el argumento modo de la función WEEK(). El año en el resultado puede ser diferente del año en el argumento de la fecha para la primera y la última semana del año.
mysql> SELECT YEARWEEK('1987-01-01');+---------------------------------------------------------+| YEAR('98-02-03')YEARWEEK('1987-01-01') |+---------------------------------------------------------+| 198653 |+---------------------------------------------------------+1 row in set (0.00 sec)
Nota – El número de la semana es diferente de lo que devolvería la función WEEK() (0) para los argumentos opcionales 0 o 1, ya que WEEK() devuelve entonces la semana en el contexto del año dado.