ここで、PostgreSQLの2つの日付の差を計算する必要があります。
SQL Serverの場合:SQL Serverの場合と同様、はるかに簡単です。
DATEDIFF(Day, MIN(joindate), MAX(joindate)) AS DateDifference;
My Try:次のスクリプトを使用しようとしています。
(Max(joindate) - Min(joindate)) as DateDifference;
質問:
私の方法は正しいですか?
これを計算する関数はPostgreSQLにありますか?
計算はDATE
型に対して正しいですが、値がタイムスタンプの場合、おそらく EXTRACT
(またはDATE_PART)を使用して、 full日;
EXTRACT(DAY FROM MAX(joindate)-MIN(joindate)) AS DateDifference
テストするSQLfiddle 。タイムスタンプの差が2日間よりも1秒少ないことに注意してください。
両方のフィールドを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
$$;
これは私が通常行う方法です。 BからAを引いた単純な日数の視点。
DATE_PART('day', MAX(joindate) - MIN(joindate)) as date_diff