Buscar por rango de fechas en VNWeb con Neotable - Forum

Forum Navigation
You need to log in to create posts and topics.

Buscar por rango de fechas en VNWeb con Neotable

Hola @LuisHp,

En una bbdd en sqlite estoy almacenando un registros en un campo fecha, siguiendo los videos que publicaste de la serie de bbdd. El problema lo tengo en el formato en que  se graban al momento de guardar los registros, si bien usando el date input me lo muestra en formato mm-dd-yyyy que es lo deseable como se ve en la imagen me lo almacena en formato "2020-04-16T03:00:00.000Z". Hay modo de revertir eso ?. Eso es un primer problema que tengo.

El segundo es que si bien tengo entendido, según leí en el foro, actualmente no es posible realizar búsquedas entre rango de fechas de modo nativo en vnw, quisiera saber si hay alguna posibilidad de hacer esto de otra manera ya que lo necesito para la appl. Probé algo como lo que hiciste en los videos de bbdd en el video de Art 5: Search the database information poniendo dos variables conteniendo las fechas de busqueda pero no trae información.

Saludos,

Sam

Uploaded files:
  • You need to login to have access to uploads.

Hola @lesanch, creo que no entiendo bien el problema.

Los campos DATE almacenan la fecha en formato DATE, es decir con toda esa información. Puedes utilizar DateInputGetYear, DateInputGetMonth and DateInputGetDay para obtener el año, mes y día de una fecha respectivamente.

Respecto a buscar registros entre dos fechas utilizando SQLite, quiza quieras echar un vistazo aquí:
https://stackoverflow.com/questions/29971762/sqlite-database-select-the-data-between-two-dates/29971871

Saludos!

 

Hola Luis,

Justo veo que publiqué esto en la parte de plugins porque lo hice desde el celular ayer, perdón y no en General como corresponde.

Volviendo al tema la verdad es que nunca trabajé con sqlite y veo que solo hay 5 tipos de datos pero no existe el data type DATE, solo el NULL,TEXT,INTEGER,BLOB,REAL. Por lo que no importa si se declara como TEXT o DATE el tema está en el formato.

Lo de la fecha pude arreglarlo como me dijiste, pongo acá por si ayuda a alguien más que necesite lo mismo:

Creo dos objetos DATE INPUT y convierto los valores de dia-mes-año de la siguiente forma alojándolo en variables independientes para luego agruparlas en una sola variable.

DATE INPUT1:

DateInputGetYear "[busca_date1]" "[anio_fecha]"
DateInputGetMonth "[busca_date1]" "[mes_fecha]"
DateInputGetDay "[busca_date1]" "[dia_fecha]"
SetVar [fecha_buscar1] "[anio_fecha]-0[mes_fecha]-[dia_fecha]"

DATE INPUT2

DateInputGetDay "[busca_date2]" "[dia_fecha]"
DateInputGetMonth "[busca_date2]" "[mes_fecha]"
DateInputGetYear "[busca_date2]" "[anio_fecha]"
SetVar [fecha_buscar2] "[anio_fecha]-0[mes_fecha]-[dia_fecha]"

En el boton de búsqueda coloco lo siguiente:

neoPhpExecSql "dbh" "buscar" "[fecha_buscar1]::[fecha_buscar2]" "ParseDataTable"

 

En el config.php coloco las siguientes líneas:

//Busqueda entre fechas
$sqlAlias[4]="buscar";
$sqlQuerys[4]="SELECT * from hbd where strftime('%Y-%m-%d', fecha) BETWEEN ? and ?";
$sqlMaxUserLevel[0]=-1;

...y con eso basta para poder buscar entre rangos de fechas en SQLITE.

Ahora tengo el último problema:

Si se fijan arriba esta línea tiene un cero (0) que marco en rojo:

SetVar [fecha_buscar2] "[anio_fecha]-0[mes_fecha]-[dia_fecha]"

y eso ocurre porque al usar las funciones DateInputGetDay y DateInputGetMonth en el caso que el día o el mes tengan un solo número no me pone el cero (0) delante y eso es indispensable para que las fechas en sqlite funcione correctamente, al menos en las pruebas que hice.

mal formato:    9-8-2020

formato correcto:   09-08-2020

Alguna idea de cómo podría solucionar eso sin poner delante ese cero (0)  o es un tema de esas funciones que se puede corregir ??

 

Saludos y gracias,

Sam

Bueno usé está solución:

 

./obtengo el valor del input date para convertirlo a formato de 4 dígitos para el año
DateInputGetYear "[fecha]" "anio_fecha]"

./obtengo el valor del input date para convertirlo a formato de 2 dígitos para el mes
DateInputGetMonth "[fecha]" "[mes_fecha]"
./obtengo el largo de la cadena para saber si tiene solo un caracter, si tiene 1 le pongo un 0 delante
StrLen "[mes_fecha]" [array_mes_length]
If [array_mes_length] == 1
SetVar [mes_fecha] "0[mes_fecha]"
EndIf

./obtengo el valor del input date para convertirlo a formato de 2 dígitos para el dia
DateInputGetDay "[fecha]" "[dia_fecha]"
./obtengo el largo de la cadena para saber si tiene solo un caracter, si tiene 1 le pongo un 0 delante
StrLen "[dia_fecha]" [array_dia_length]
If [array_dia_length] == 1
SetVar [dia_fecha] "0[dia_fecha]"
EndIf

./Seteo la variable que se usará para el insert en la bbdd
SetVar [fecha_unificada] "[anio_fecha]-[mes_fecha]-[dia_fecha]"

 

Saludos,

Sam

Por lo que veo está todo bajo control :)
Genial!

Volviendo al tema la verdad es que nunca trabajé con sqlite y veo que solo hay 5 tipos de datos pero no existe el data type DATE, solo el NULL,TEXT,INTEGER,BLOB,REAL. Por lo que no importa si se declara como TEXT o DATE el tema está en el formato.

Efectivamente SQLite almacena las fechas en campos de texto pero en formato estandar:
TEXT as ISO8601 strings ("YYYY-MM-DD HH:MM:SS.SSS").

Funciones SQLite relacionadas con fechas y horas:
https://www.sqlite.org/lang_datefunc.html

Saludos!