2013-07-28 9 views
18

私はMySQLを使ったアプリケーションを持っています。私は過去24時間の記録を伸ばした報告書を持っていました。私はクエリを使用しました:昨日のpostrgesqlのレコード

WHERE (DATE_SUB(CURDATE(), INTERVAL 1 DAY) <= FROM_UNIXTIME(`workorder`.`CREATEDTIME`/1000)) 

私はPostgreSQLを使用する必要があり、過去24時間のレポート作成方法はわかりません。 お手伝いできますか?便宜上

答えて

34
WHERE workorder.createdtime > current_date - 1  -- Yesterday and today 

WHERE workorder.createdtime > current_timestamp - interval '1 day' -- last 24hr 
+1

エラー:オペレータが存在しません:bigint>タイムゾーン付きタイムスタンプ – Krokodyle

+0

@Krokodyleこのエラーは、あなたの 'workorder.createdtime'が' bigint'であることを意味します。適切な 'date'または' timestamp'に変換する必要があります。 –

+0

@IgorRomanchenko私は現在までに翻訳されています。できます!あなたの助けをありがとう – Krokodyle

5
where workorder.createdtime >= now() - interval '24 hour' 
+3

一般に、 'now'ではなくSQL標準の' current_date'キーワードを使用する方が良いです。 –

+0

ありがとう、私は非常に頻繁にポストグルを使用していません –

16

> TIMESTAMP 'yesterday'

、Postgresはspecial Date/Time inputsとして、いくつかのハードコードされた値を含みます。彼らを含める:

  • yesterday
  • today
  • tomorrow
  • now

SELECT TIMESTAMP 'now'を試してみてください。

たとえば、次はクエリです。

SELECT when_row_created_ 
FROM customer_ 
WHERE when_row_created_ > TIMESTAMP 'yesterday' 
ORDER BY when_row_created_ DESC 
; 

これらのコマンドは、実動コードには適していない可能性がありますが、開発には便利です。ドキュメントを読んで、これらのコマンドの動作、セッションのタイムゾーンがそれらにどのように影響するかを理解するための練習をしてください。

ダウンサイドには、(a)タイムゾーンの重要な問題を暗黙的に無視し、(b)標準SQLではなく、

+0

好奇心のために、なぜ彼らは生産コードに適していませんか? – VillasV

+1

@VillasV一方、タイムゾーンの重要な問題は無視されます。暗黙的にセッションの現在のタイムゾーンに依存します。コードに明示的にタイムゾーンを指定することをお勧めします。 –