Trac sqlite日期查询

use*_*538 2 sqlite datetime trac timestamp

我有一段时间生成一份报告,其中包含我的门票创建日期.

这是我的sqlite查询(我直接查询数据库)

.header on
.mode csv
.output opentickets.csv
SELECT DISTINCT
   id AS ticket, summary, status, priority, t.type AS type, 
   owner, time as created

  FROM ticket t, ticket_custom q
  LEFT JOIN enum p ON p.name = t.priority AND p.type = 'priority'
  WHERE t.id = q.ticket AND status <> 'closed'
 ORDER BY  priority, time;
Run Code Online (Sandbox Code Playgroud)

但是我在创作时获得的价值是垃圾:当我得到2012-07-03时,我得到1341324096360000

我试过unix epoch时间转换...查询:

.header on
.mode csv
.output opentickets.csv
SELECT DISTINCT
   id AS ticket, summary, status, priority, t.type AS type, 
   owner, datetime(time, 'unixepoch') as created

  FROM ticket t, ticket_custom q
  LEFT JOIN enum p ON p.name = t.priority AND p.type = 'priority'
  WHERE t.id = q.ticket AND status <> 'closed'
 ORDER BY  priority, time;
Run Code Online (Sandbox Code Playgroud)

我得到:-1413-03-01 13:07:12

我错过了什么?

Jos*_*ase 5

CL是正确的,时间以微秒为单位存储.您可以在架构中看到时间字段为int64,在.12的发行说明中,表示它们已将时间从"自纪元以来的秒数"更改为"自纪元以来的微秒".

至于我在Trac查询中显示时间的经验,我没有做任何转换.这是一个查询,用于显示过去7天内所有已更改的票证.如您所见,我将票证更改时间显示为select和Trac正确格式化的一部分.Trac会自动将创建,修改,日期,时间字段格式化为日期和/或时间.有关详细信息,请参阅此Trac wiki页面.

    SELECT 
tc.Ticket AS ticket, 
tc.Time as time, 
c.value as  __group__,
ifnull(tc.Newvalue,0) as total,
tc.Author  AS author,         
tc.Field as field     
from ticket_change tc 
LEFT JOIN ticket t on t.id = tc.ticket
LEFT JOIN ticket_custom c on c.ticket = tc.ticket and c.name= 'customer'
LEFT JOIN ticket_custom tt on tt.ticket = tc.ticket and tt.name = 'totalhours'
where field = 'hours' and c.Value is not null
and tc.Time > strftime('%s',CURRENT_DATE-7) +0
and tc.Time < strftime('%s',CURRENT_DATE) +0
and tc.Author = $USER
and tt.value is not null
Run Code Online (Sandbox Code Playgroud)

如果你想做一些特殊的fomatting,请按时查看SQLite文档,但这是一个简单的例子

strftime('%m/%d/%Y', time / 1000000, 'unixepoch', 'localtime') 
Run Code Online (Sandbox Code Playgroud)

我希望这有帮助.