如何在trac中为此SQL添加日期范围?

时间:2011-09-03 23:18:26

标签: sql trac

我们有以下查询按预期工作,并且在修改trac时还剩下最后一件事:

SELECT
   p.value AS __color__,
   owner AS __group__,
   id AS ticket,
   severity,
   status,
   priority,
   summary,
   component, 
   milestone, 
   t.type AS type, 
   time AS created, 
   description AS _description, 
   reporter AS _reporter, 
   changetime AS modified, 
   time AS _time,
   reporter AS _reporter 
FROM 
   ticket t 
   LEFT JOIN enum p 
   ON p.name = t.priority 
      AND p.type = 'priority' 
WHERE 
   status = 'closed' 
ORDER BY 
   owner, 
   p.value, 
   t.type, 
   time

我们需要将日期范围设置为仅在8月5日到8月17日期间关闭门票。我们需要能够编辑查询以根据需要更改日期范围,因为我们需要几个不同的日期范围。您能否告知如何将查询更改为8月5日至8月17日的日期范围?

2 个答案:

答案 0 :(得分:2)

添加到WHERE子句的末尾:

  

AND changetime BETWEEN'2011-08-05'EN'2011-08-17'

我假设'changetime'是存储票证关闭日期的字段。

答案 1 :(得分:1)

您真的想选择t.changetime作为约束吗?关闭票证后的任何编辑或评论都会弄乱您的报告。无论如何,现在我们假设您可以以某种方式排除这种情况。

正如我对Austin回答的评论中暗示的那样,我无法确认,也没想到日期字符串会在这里起作用。 t.changetime保存Integers(Trac 0.11)或INT / LONG值(Trac 0.12),因此必须与这些值进行比较。

我会告诉你如何在这里制作它们:

$> date -d '2011-08-06' +%s
1312581600
$> date -d '2011-08-18' +%s
1313618400

如您所见,在运行像BASH这样的shell的任何终端窗口上,1970-01-01之后从字符串到POSIX的转换非常容易。对于Trac 0.12,您需要微秒格式,因此只需添加6个零或使用

echo $(($(date -d '2011-08-18' +%s) * 1000000))
1313618400000000

注意,要包含完整的2011-08-17,您需要经过它,直到第二天的开始,因此'2011-08-18'可能就是您要转换的内容。

现在把它们放在一起,你就会得到

AND t.changetime BETWEEN 1312581600 AND 1313618400

或Trac> = 0.12

AND t.changetime BETWEEN 1312581600000000 AND 1313618400000000