123

PostgreSQL でSQLServer 関数の datediffを実装する方法を探しています。つまり、この関数は、指定された開始日と終了日の間に交差する指定された日付部分の境界の数を (符号付き整数値として) 返します。

datediff(dd, '2010-04-01', '2012-03-05') = 704 // 704 changes of day in this interval
datediff(mm, '2010-04-01', '2012-03-05') = 23  // 23 changes of month
datediff(yy, '2010-04-01', '2012-03-05') = 2   // 2 changes of year

単に減算を使用して「dd」を実行できることは知っていますが、他の2つについて何か考えはありますか?

4

10 に答える 10

199

それらを単純に減算します。

SELECT ('2015-01-12'::date - '2015-01-01'::date) AS days;

結果:

 days
------
   11
于 2015-06-12T09:38:56.293 に答える
146
SELECT
  AGE('2012-03-05', '2010-04-01'),
  DATE_PART('year', AGE('2012-03-05', '2010-04-01')) AS years,
  DATE_PART('month', AGE('2012-03-05', '2010-04-01')) AS months,
  DATE_PART('day', AGE('2012-03-05', '2010-04-01')) AS days;

これにより、完全な年、月、日が得られます... 2つの日付の間:

          age          | years | months | days
-----------------------+-------+--------+------
 1 year 11 mons 4 days |     1 |     11 |    4

より詳細なdatediff 情報

于 2013-07-24T11:54:59.847 に答える
7
SELECT date_part ('year', f) * 12
     + date_part ('month', f)
FROM age ('2015-06-12'::DATE, '2014-12-01'::DATE) f

結果: 6

于 2015-06-12T18:17:57.937 に答える