Manejo de fechas en Querys para SQLite
Publicado: Jue Oct 06, 2011 1:32 am
Hola a todos,
Tengo un rato buscando la manera de hacer una query en SQLite con manejo de
fechas.
La query es la siguiente:
select TipoDocumento, origen, OriSerie, OriConsec, orifecha, orihora,
Status_Documento, profecha, prohora, uuid, cliente_nombre AS Nombre,
cliente_rfc AS RFC,"MPX" as Moneda, (CASE WHEN status_documento =
"CANCELADO" and tipodocumento IN("FAC","NCG","RHO","RAR") THEN
(select -1*importe from controlfacturas b where b.OriSerie = a.OriSerie and
b.OriConsec = a.OriConsec and b.Importe != 0 and b.origen=a.origen) WHEN
status_documento = "CANCELADO" and tipodocumento = "NCD" THEN (select
importe from controlfacturas b where b.OriSerie = a.OriSerie and b.OriConsec
= a.OriConsec and b.Importe != 0 and b.origen=a.origen) WHEN tipodocumento
IN("FAC","NCG","RHO","RAR") THEN importe WHEN tipodocumento = "NCD" THEN
importe*-1 END) from controlfacturas a where
julianday("20"||dtoc(profecha)) >= julianday("2011-09-01") and
julianday("20"||dtoc(profecha)) < julianday("2011-10-06") and status = 'P'
Lo curioso del caso es que si esta query la corro directamente en el
ejecutor de consultas en SQLite Editor la resuelve bien, pero si esta misma
instrucción la ejecuto desde código (ya sea usando TSQLQuery o directamente
con el método QuerryArray() de TADODataSource) no resuelve bien la consulta,
después de varios monitoreós detecto que el detalle esta en la clausula
where, en concreto en las condiciones de fechas:
where julianday("20"||dtoc(profecha)) >= julianday("2011-09-01") and
julianday("20"||dtoc(profecha)) < julianday("2011-10-06") and status = 'P'
Me pueden apoyar indicándome cual sería la forma correcta de manejar
fechas...
Agradezco de antemano la valiosa información que me puedan aportar.
Saludos,
Mario Dávalos
P.D. julianday("20"||dtoc(profecha)), que raro se ve esto, pero fue la única
forma que me resolvió correctamente en SQLite Editor.
Tengo un rato buscando la manera de hacer una query en SQLite con manejo de
fechas.
La query es la siguiente:
select TipoDocumento, origen, OriSerie, OriConsec, orifecha, orihora,
Status_Documento, profecha, prohora, uuid, cliente_nombre AS Nombre,
cliente_rfc AS RFC,"MPX" as Moneda, (CASE WHEN status_documento =
"CANCELADO" and tipodocumento IN("FAC","NCG","RHO","RAR") THEN
(select -1*importe from controlfacturas b where b.OriSerie = a.OriSerie and
b.OriConsec = a.OriConsec and b.Importe != 0 and b.origen=a.origen) WHEN
status_documento = "CANCELADO" and tipodocumento = "NCD" THEN (select
importe from controlfacturas b where b.OriSerie = a.OriSerie and b.OriConsec
= a.OriConsec and b.Importe != 0 and b.origen=a.origen) WHEN tipodocumento
IN("FAC","NCG","RHO","RAR") THEN importe WHEN tipodocumento = "NCD" THEN
importe*-1 END) from controlfacturas a where
julianday("20"||dtoc(profecha)) >= julianday("2011-09-01") and
julianday("20"||dtoc(profecha)) < julianday("2011-10-06") and status = 'P'
Lo curioso del caso es que si esta query la corro directamente en el
ejecutor de consultas en SQLite Editor la resuelve bien, pero si esta misma
instrucción la ejecuto desde código (ya sea usando TSQLQuery o directamente
con el método QuerryArray() de TADODataSource) no resuelve bien la consulta,
después de varios monitoreós detecto que el detalle esta en la clausula
where, en concreto en las condiciones de fechas:
where julianday("20"||dtoc(profecha)) >= julianday("2011-09-01") and
julianday("20"||dtoc(profecha)) < julianday("2011-10-06") and status = 'P'
Me pueden apoyar indicándome cual sería la forma correcta de manejar
fechas...
Agradezco de antemano la valiosa información que me puedan aportar.
Saludos,
Mario Dávalos
P.D. julianday("20"||dtoc(profecha)), que raro se ve esto, pero fue la única
forma que me resolvió correctamente en SQLite Editor.