Hemos visto como almacenar fechas en un campo de tipo text en SQLite. Ahora veremos como podemos darle un formato particular según la necesidad de nuestra aplicación cuando la recuperamos.
La función strftime nos ayuda a dar un formato particular cuando recuperamos una fecha.
Veremos con un ejemplo la sintaxis de esta función.
Trabajamos con la tabla "asistencia". Si existe la eliminamos:
drop table if exists asistencia;
Creamos la tabla con la siguiente estructura:
create table asistencia( dni text, fechahora text, primary key (dni, fechahora) );
Definimos el campo fechahora para almacenar la fecha y la hora de ingreso de una persona a la empresa.
Almacenamos un conjunto de filas en la tabla "asistencia":
insert into asistencia(dni, fechahora) values ('11111111', '2018-09-14 08:00:00'); insert into asistencia(dni, fechahora) values ('22222222', '2018-09-14 06:12:00'); insert into asistencia(dni, fechahora) values ('33333333', '2018-09-14 18:05:00'); insert into asistencia(dni, fechahora) values ('11111111', '2018-09-15 08:02:00'); insert into asistencia(dni, fechahora) values ('22222222', '2018-09-15 06:00:00'); insert into asistencia(dni, fechahora) values ('33333333', '2018-12-15 14:00:00');
Imprimir las fechas de ingreso de los empleados con el formato día/mes/año:
select dni, strftime('%d/%m/%Y',fechahora) from asistencia;
Tenemos ahora la recuperación de la fecha con el formato deseado:
La función strftime tiene dos parámetros, el primero indica el formato y el segundo es el campo de la tabla a ser afectado por dicho formato.
Utilizamos el caracter % y seguidamente los valores posibles más utilizados son:
Otros valores posibles:
Continuando con el problema vamos a imprimir la la hora de ingreso de cada empleado utilizando el formato "horas:minutos":
select dni, strftime('%H:%M',fechahora) from asistencia;
Imprimir el nombre de mes de cada fecha:
select dni, case strftime('%m',fechahora) when '01' then 'enero' when '02' then 'febrero' when '03' then 'marzo' when '04' then 'abril' when '05' then 'mayo' when '06' then 'junio' when '07' then 'julio' when '08' then 'agosto' when '09' then 'septiembre' when '10' then 'octubre' when '11' then 'noviembre' when '12' then 'diciembre' end as mes from asistencia;
Utilizamos la estructura case para analizar el valor generado por la función strftime. El resultado de ejecutar la consulta es:
Función Equivale a strftime() date(...) strftime('%Y-%m-%d', ...) time(...) strftime('%H:%M:%S', ...) datetime(...) strftime('%Y-%m-%d %H:%M:%S', ...) julianday(...) strftime('%J', ...)
Es más eficiente utilizar la función 'date' en lugar de strftime('%Y-%m-%d', ...), pero cuando tenemos que obtener un formato particular no nos queda otra opción que utilizar 'strftime'.
Si mediante la sintaxis:
select date('now');
nos muestra la fecha actual con el formato año-mes-día, hacer los cambios necesarios para que el formato de salida sea:
Hoy es 5 de octubre de 2018
Si mediante la sintaxis:
select time('now','localtime');
nos muestra la hora local actual con el formato horas:minutos:segundos, hacer los cambios necesarios para que el formato de salida sea:
05 horas 12 minutos
Imprimir el día de la semana de la fecha actual.
select 'Hoy es ' || strftime('%d',date('now')) || ' de ' || case strftime('%m',date('now')) when '01' then 'enero' when '02' then 'febrero' when '03' then 'marzo' when '04' then 'abril' when '05' then 'mayo' when '06' then 'junio' when '07' then 'julio' when '08' then 'agosto' when '09' then 'septiembre' when '10' then 'octubre' when '11' then 'noviembre' when '12' then 'diciembre' end || ' de ' || strftime('%Y',date('now')) as fecha; select strftime('%H horas %M minutos',time('now','localtime')); select case strftime('%w',datetime('now')) when '0' then 'domingo' when '1' then 'lunes' when '2' then 'martes' when '3' then 'miercoles' when '4' then 'jueves' when '5' then 'viernes' when '6' then 'sabado' end as diasemana;
Puede ejecutar comandos de SQLite directamente en el sitio sin tener que instalar nada en su computadora.