Listado completo de tutoriales

27 - Funciones para el uso de fecha y hora.


Ver video

MySQL tiene algunas funciones para trabajar con fechas y horas. Estas son algunas:

-adddate(fecha, interval expresion): retorna la fecha agregándole el intervalo especificado. Ejemplos: adddate('2006-10-10',interval 25 day) retorna "2006-11-04". adddate('2006-10-10',interval 5 month) retorna "2007-03-10".

-adddate(fecha, dias): retorna la fecha agregándole a fecha "dias". Ejemplo: adddate('2006-10-10',25), retorna "2006-11-04".

-addtime(expresion1,expresion2): agrega expresion2 a expresion1 y retorna el resultado.

-current_date: retorna la fecha de hoy con formato "YYYY-MM-DD" o "YYYYMMDD".

-current_time: retorna la hora actual con formato "HH:MM:SS" o "HHMMSS".

-date_add(fecha,interval expresion tipo) y date_sub(fecha,interval expresion tipo): el argumento "fecha" es un valor "date" o "datetime", "expresion" especifica el valor de intervalo a ser añadido o substraído de la fecha indicada (puede empezar con "-", para intervalos negativos), "tipo" indica la medida de adición o substracción. Ejemplo: date_add('2006-08-10', interval 1 month) retorna "2006-09-10"; date_add('2006-08-10', interval -1 day) retorna "2006-09-09"; date_sub('2006-08-10 18:55:44', interval 2 minute) retorna "2006-08-10 18:53:44"; date_sub('2006-08-10 18:55:44', interval '2:3' minute_second) retorna "2006-08-10 18:52:41". Los valores para "tipo" pueden ser: second, minute, hour, day, month, year, minute_second (minutos y segundos), hour_minute (horas y minutos), day_hour (días y horas), year_month (año y mes), hour_second (hora, minuto y segundo), day_minute (dias, horas y minutos), day_second(dias a segundos).

-datediff(fecha1,fecha2): retorna la cantidad de días entre fecha1 y fecha2.

-dayname(fecha): retorna el nombre del día de la semana de la fecha. Ejemplo: dayname('2006-08-10') retorna "thursday".

-dayofmonth(fecha): retorna el día del mes para la fecha dada, dentro del rango 1 a 31. Ejemplo: dayofmonth('2006-08-10') retorna 10.

-dayofweek(fecha): retorna el índice del día de semana para la fecha pasada como argumento. Los valores de los índices son: 1=domingo, 2=lunes,... 7=sábado). Ejemplo: dayofweek('2006-08-10') retorna 5, o sea jueves.

-dayofyear(fecha): retorna el día del año para la fecha dada, dentro del rango 1 a 366. Ejemplo: dayofyear('2006-08-10') retorna 222.

-extract(tipo from fecha): extrae partes de una fecha.

Ejemplos:

 extract(year from '2006-10-10'), retorna "2006".
 extract(year_month from '2006-10-10 10:15:25') retorna "200610".
 extract(day_minute from '2006-10-10 10:15:25') retorna "101015";

Los valores para tipo pueden ser: second, minute, hour, day, month, year, minute_second, hour_minute, day_hour, year_month, hour_second (horas, minutos y segundos), day_minute (días, horas y minutos), day_second (días a segundos).

-hour(hora): retorna la hora para el dato dado, en el rango de 0 a 23.

Ejemplo: hour('18:25:09') retorna "18";

-minute(hora): retorna los minutos de la hora dada, en el rango de 0 a 59.

-monthname(fecha): retorna el nombre del mes de la fecha dada.

Ejemplo: monthname('2006-08-10') retorna "August".

-month(fecha): retorna el mes de la fecha dada, en el rango de 1 a 12.

-now() y sysdate(): retornan la fecha y hora actuales.

-period_add(p,n): agrega "n" meses al periodo "p", en el formato "YYMM" o "YYYYMM"; retorna un valor en el formato "YYYYMM". El argumento "p" no es una fecha, sino un año y un mes. Ejemplo: period_add('200608',2) retorna "200610".

-period_diff(p1,p2): retorna el número de meses entre los períodos "p1" y "p2", en el formato "YYMM" o "YYYYMM". Los argumentos de período no son fechas sino un año y un mes. Ejemplo: period_diff('200608','200602') retorna 6.

-second(hora): retorna los segundos para la hora dada, en el rango de 0 a 59.

-sec_to_time(segundos): retorna el argumento "segundos" convertido a horas, minutos y segundos. Ejemplo: sec_to_time(90) retorna "1:30".

-timediff(hora1,hora2): retorna la cantidad de horas, minutos y segundos entre hora1 y hora2.

-time_to_sec(hora): retorna el argumento "hora" convertido en segundos.

-to_days(fecha): retorna el número de día (el número de día desde el año 0).

-weekday(fecha): retorna el índice del día de la semana para la fecha pasada como argumento. Los índices son: 0=lunes, 1=martes,... 6=domingo). Ejemplo: weekday('2006-08-10') retorna 3, o sea jueves.

-year(fecha): retorna el año de la fecha dada, en el rango de 1000 a 9999. Ejemplo: year('06-08-10') retorna "2006".

Un listado completo de todas las funciones relacionadas a fechas y horas las podemos consultar en la documentación oficial.

Servidor de MySQL instalado en forma local.

Ingresemos al programa "Workbench" y ejecutemos el siguiente bloque de instrucciones SQL empleando algunas funciones para el manejo de fechas y horas:

drop table if exists prestamos;

create table prestamos(
  titulo varchar(40) not null,
  documento char(8) not null,
  fechaprestamo date not null,
  fechadevolucion date,
  devuelto char(1) default 'n'
 );

insert into prestamos (titulo,documento,fechaPrestamo,fechaDevolucion)
  values ('Manual de 1 grado','23456789','2006-08-10',date_add('2006-08-10', interval 5 day));

select * from prestamos;

insert into prestamos (titulo,documento,fechaPrestamo,fechaDevolucion)
  values ('Alicia en el pais de las maravillas','23456789',
'2006-08-12',date_add('2006-08-12', interval 5 day));
insert into prestamos (titulo,documento,fechaPrestamo,fechaDevolucion)
  values ('El aleph','22543987','2006-08-15',date_add('2006-08-15', interval 5 day));
insert into prestamos (titulo,documento,fechaPrestamo,fechaDevolucion)
  values ('Manual de geografia 5 grado','25555666','2006-08-30',
date_add('2006-08-30', interval 5 day));

select * from prestamos;

insert into prestamos (titulo,documento,fechaPrestamo,fechaDevolucion)
  values ('Atlas universal','24000111',current_date,date_add(current_date, interval 5 day));

select * from prestamos;

Que nos genera una salida similar a esta:

MySQL funciones manejo de fechas y horas

Retornar