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子句后的截图)。
有人知道出了什么问题吗?
答案 0 :(得分: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
的日期字符串计算
请注意,某些特殊列名称(“已创建”,“已修改”,“日期”,“时间”)会触发自动格式设置为日期和/或时间。 TicketQuery在这方面效果更好,因为您可以将时间限制更自然地指定为changetime=1w..now
,但是您可以在TracReports域中隐含地询问解决方案。
答案 1 :(得分: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