Trac: la declaración WHERE en la consulta de SQL Lite es "falsa" para todas las tuplas, aunque no debería serlo

La siguiente declaración de SQL Lite en Trac

  SELECT 
  id,
  changetime / 1000000 as 'MODIFIED',
  strftime('%s',"now") as 'NOW',
  ((strftime('%s',"now")) - (changetime / 1000000)) as 'DIFF'
  FROM ticket
  WHERE (CAST(((strftime('%s',"now")) - (changetime / 1000000)) AS NUMERIC) < 86400.0)

da como resultado la siguiente salida:

enter image description here

"changetime" es un campo de Trac (tipo: int64). Lo que quiero lograr es que se seleccionen todos los boletos cuyo tiempo de cambio sea dentro de una semana. Tuve grandes problemas porque changetime es int64 y strftime devuelve algo diferente. Es por eso que estoy dividiendo por 1000000.

Ahora tengo el problema de que la declaración WHERE siempre es falsa, aunque, como puede ver en la captura de pantalla, tengo boletos donde se aplica (captura de pantalla hecha después de eliminar la cláusula WHERE temporalmente).

¿Alguien sabe lo que va mal?

preguntado el 03 de julio de 12 a las 13:07

Debe mencionar explícitamente su versión de Trac, porque este formato de campo de tiempo cambió para Trac 0.12, por lo que tiene una versión 0.12.x. Además, aparentemente no está claro por qué no puede usar el módulo TicketQuery, que tiene un mejor soporte de selección de rango de tiempo. -

2 Respuestas

SELECT
  id,
  changetime as modified,
  strftime('%s',"now") as date,
  (strftime('%s',"now") - changetime / 1000000) as 'DIFF'
FROM ticket
WHERE (CAST(strftime('%s',"now") AS NUMERIC) - changetime / 1000000) < 86400.0

funciona (probado en Trac 0.11 con divisor 1 en lugar de 1.000.000), porque tiene que hacer la conversión de tipo antes de continuar con el cálculo; no se puede calcular con las cadenas de fecha de strftime de inmediato.

Tenga en cuenta que algunos nombres de columnas especiales ('creado', 'modificado', 'fecha', 'hora') activan el formato automático como fecha y/u hora. TicketQuery funciona mejor a este respecto, ya que puede especificar límites de tiempo más naturales como changetime=1w..now, pero está pidiendo implícitamente una solución en el dominio de TracReports.

Respondido 03 Jul 12, 18:07

Tengo un informe dentro de Trac que me da tickets que han cambiado en los últimos 7 días y estoy manejando la cláusula where con el siguiente SQL.

from ticket_change tc 
where tc.Time > strftime('%s',CURRENT_DATE-7) +0
and tc.Time < strftime('%s',CURRENT_DATE) +0

Respondido 03 Jul 12, 18:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.