web-dev-qa-db-ja.com

PostgreSQLのDATE Differenceの計算方法は?

ここで、PostgreSQLの2つの日付の差を計算する必要があります。

SQL Serverの場合:SQL Serverの場合と同様、はるかに簡単です。

DATEDIFF(Day, MIN(joindate), MAX(joindate)) AS DateDifference;

My Try:次のスクリプトを使用しようとしています。

(Max(joindate) - Min(joindate)) as DateDifference;

質問

  • 私の方法は正しいですか?

  • これを計算する関数はPostgreSQLにありますか?

13
Meem

計算はDATE型に対して正しいですが、値がタイムスタンプの場合、おそらく EXTRACT (またはDATE_PART)を使用して、 full日;

EXTRACT(DAY FROM MAX(joindate)-MIN(joindate)) AS DateDifference

テストするSQLfiddle 。タイムスタンプの差が2日間よりも1秒少ないことに注意してください。

20

両方のフィールドをDATEデータ型にキャストし、マイナスを使用できます。

(CAST(MAX(joindate) AS date) - CAST(MIN(joindate) AS date)) as DateDifference

テストケース:

SELECT  (CAST(MAX(joindate) AS date) - CAST(MIN(joindate) AS date)) as DateDifference
FROM 
    generate_series('2014-01-01'::timestamp, '2014-02-01'::timestamp, interval '1 hour') g(joindate);

結果:31

または、関数datediff()を作成します。

CREATE OR REPLACE FUNCTION datediff(timestamp, timestamp) 
RETURNS int 
LANGUAGE sql 
AS
$$
    SELECT CAST($1 AS date) - CAST($2 AS date) as DateDifference
$$;
7
Frank Heikens

これは私が通常行う方法です。 BからAを引いた単純な日数の視点。

DATE_PART('day', MAX(joindate) - MIN(joindate)) as date_diff
0
anoraq