11

テーブルの特定のフィールド間の時間を調べようとしています。ただし、Postgresqlを使用しているため:(( DATEDIFF関数を使用できません。Postgresで同様のことを行う方法を示す明確なガイド/チュートリアルがネット上に見つからないため、同じことを行うための支援が必要ですしかしPostgresでは

DATEDIFF関数をサポートするRDBMSを使用している場合、このクエリが機能すると想定しているので、基本的に私の質問は、Postgresqlが提供する機能を使用して機能するようにこれを変更するにはどうすればよいですか?

SELECT Question.ID, 
Question.Status, COUNT (qUpdate.ID)  AS NumberofUpdates,
DATEDIFF (Question.LoggedTime,MIN(qUpdate.UpdateTime)) AS TimeBeforeFirstUpdate,
DATEDIFF(Question.LoggedTime, MAX(qUpdate.UpdateTime)) AS TimeBeforeLastUpdate
FROM qUpdate
LEFT JOIN Question ON qUpdate.qID=Question.ID
WHERE Question.Status = 'closed' AND qUpdate.Update NOT NULL
GROUP BY Question.Status, Question.ID, Question.LoggedTime;

さらに詳しい情報や説明が必要な場合は、できるだけ早く対応させていただきます。

4

4 に答える 4

12

「datediff」関数は必要ありません。

2つの日付を引くだけです。

Question.LoggedTime - MIN(qUpdate.UpdateTime)

わからないが、すべてがオンラインで文書化されている場合:
http ://www.postgresql.org/docs/current/static/functions-datetime.html

于 2012-04-08T19:47:49.687 に答える
4

age(<date1>, <date2>)(の代わりに)関数を使用できますDATEDIFF

これはうまくいくはずです-

SELECT Question.ID, 
Question.Status, COUNT (qUpdate.ID)  AS NumberofUpdates,
age(Question.LoggedTime,MIN(qUpdate.UpdateTime)) AS TimeBeforeFirstUpdate,
age(Question.LoggedTime, MAX(qUpdate.UpdateTime)) AS TimeBeforeLastUpdate
FROM qUpdate
LEFT JOIN Question ON qUpdate.qID=Question.ID
WHERE Question.Status = 'closed' AND qUpdate.Update NOT NULL
GROUP BY Question.Status, Question.ID, Question.LoggedTime;

psqlでこのエラーが発生ERROR: date/time field value out of rangeした場合は、適切なを選択する必要があることに注意してくださいdatestyle

于 2012-04-08T19:54:10.467 に答える
3
SELECT extract(year from age('2014-01-23', '1985-08-27'));
-- returns 28 years, my current age.
于 2014-01-23T13:22:51.860 に答える
0

これにより、秒単位の時間差分が得られます。

select extract(epoch from to_date::timestamp - from_date::timestamp) 
于 2021-10-12T21:56:39.490 に答える