1

いくつかのT-SQLストアドプロシージャをPL/pgSqlに移植していますが、PostgreSQLは非常に新しいため、pgコミュニティでどのような便利なユーティリティ関数が利用できるかわかりません。どこかに「ほぼすべての人が使用する」堅牢な日付数学関数のセットはありますか?すでに優れたパッケージが存在する場合は、日付計算関数をすばやくまとめたくありません。

「自然言語」の文字列リテラル引数を使用するPostgreSQLの日付計算演算子は、クエリを入力していて、間隔がわかっている場合に便利です。

      select now() - interval '1 day'

ただし、間隔1がネストされた日付数学関数呼び出しを含む計算の結果である場合、これらの文字列リテラルは実際にはまったくユーザーフレンドリーではなく、date_add関数を使用する方が簡単です。

      select dateadd(d, {calculation that returns the interval}, now() )

ありがとう

4

3 に答える 3

0

PostgreSQLでは、日時値に間隔値を加算および減算するだけです。

'2001-06-27 14:43:21'::TIMESTAMP - '00:10:00'::INTERVAL = '2001-06-27 14:33:21'::TIMESTAMP
'2001-06-27 14:43:21'::TIMESTAMP- '2001-06-27 14:33:21'::TIMESTAMP = '00:10:00'::INTERVAL

詳細については、PostgreSQLオンラインドキュメントの「関数と演算子」を参照してください。

日付の月の最初の日を計算するには:date_trunc('month', date)

翌月の初日:date_trunc('month', date) + '1 month'::INTERVAL

この日付の月の最初の日に3か月を追加します。date_trunc('month', date) + 3*('1 month'::INTERVAL)

間隔は文字列ではなくデータ型であり、その値を使用して計算を行うことができます。

于 2013-01-30T13:18:05.263 に答える
0

あなたが話している「自然言語」の文字列は、インターバルリテラルです。間隔は、日付演算を使用して取得することもできます。

確かに、dateaddはPostgresqlで次のように非常に簡単にエミュレートできます。

select d +({計算は間隔を返します} :: text ||'日'):: interval

必要に応じて、「月」や「時間」などに置き換えてください。

于 2013-01-30T13:29:51.817 に答える
0

例を挙げましょう。任意の日付から1970年1月1日から経過した月数を減算し、その月数を1970年1月1日に加算して、任意の日付が含まれる月の最初の日を返したい

select (date_trunc('month', '2013-01-30'::date))::date

または、今月の初日に月を加算して翌月の初日を取得し、1日を減算して今月の最終日を取得します

select date_trunc('month', '2013-01-30'::date + 1 * interval '1 month')::date - 1

interval '1 month'上記の例では、を整数で乗算することにより、任意の月数を追加できることに注意してください。文字列を操作せずに、任意の間隔でこれを行うことができます'1 month'。したがって、任意の間隔を加算または減算するには、次のようにします。

select current_date + 5 * interval '1 month'

面倒な文字列操作は必要ありません。分数を掛けることもできます:

select current_timestamp + 3.5 * interval '1 minute'

タイプに日を加算または減算するにdateは、整数を使用します。

select current_date + 10
于 2013-01-30T13:37:36.050 に答える