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)。私が達成したいのは、変更時間が1週間以内のすべてのチケットが選択されることです。changetime は int64 で、strftime は別のものを返すため、大きな問題がありました。これが、1000000 で割っている理由です。

スクリーンショットでわかるように、WHEREステートメントが常にfalseであるという問題がありますが、それが適用されるチケットがあります(一時的に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

strftime動作します (Trac 0.11 で 1.000.000 の代わりに分周器 1 を使用してテスト)。これは、計算を続行する前に型変換を行う必要があるためです。すぐに日付文字列を使用して計算することはできません。

一部の特別な列名 ('created'、'modified'、'date'、'time') は、日付や時刻として自動フォーマットをトリガーすることに注意してください。TicketQuery は、より自然な時間制限を として指定できるため、この点でより適切に機能しますがchangetime=1w..now、暗黙のうちに TracReports ドメインでの解決策を求めています。

于 2012-07-03T17:29:51.477 に答える
0

過去 7 日間に変更されたチケットを取得する Trac 内のレポートがあり、次の 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 に答える