0

Trac 中的以下 SQL Lite 语句

  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)

结果如下输出:

在此处输入图像描述

“changetime”是来自 Trac 的一个字段(类型:int64)。我想要实现的是所有更改时间在一周内的票都被选中。我遇到了严重的问题,因为 changetime 是 int64 并且 strftime 返回了不同的东西。这就是为什么我要除以 1000000。

现在我有一个问题,即 WHERE 语句始终是错误的,正如您在屏幕截图中看到的那样,我有它适用的票证(暂时删除 WHERE 子句后制作的屏幕截图)。

有人知道出了什么问题吗?

4

2 回答 2

1
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

有效(在 Trac 0.11 上使用分隔符 1 而不是 1.000.000 进行测试),因为您必须在继续计算之前进行类型转换 - 无法strftime立即使用日期字符串进行计算。

请注意,一些特殊的列名('created'、'modified'、'date'、'time')会触发自动格式化为日期和/或时间。TicketQuery 在这方面工作得更好,因为您可以更自然地指定时间限制changetime=1w..now,但您隐含地要求 TracReports 域中的解决方案。

于 2012-07-03T17:29:51.477 回答
0

我在 Trac 中有一份报告,其中包含在过去 7 天内更改的票证,我正在使用以下 SQL 处理 where 子句。

from ticket_change tc 
where tc.Time > strftime('%s',CURRENT_DATE-7) +0
and tc.Time < strftime('%s',CURRENT_DATE) +0
于 2012-07-03T17:02:07.667 回答