我们有以下查询按预期工作,并且在修改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日的日期范围?
答案 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