5

SQLで2つの日付の間の日数を決定する方法が必要です。

回答はANSISQLである必要があります。

4

4 に答える 4

7

ANSI SQL-92 では、DATE - DATE を INTERVAL 型を返すものとして定義しています。EXTRACT 関数 (4.5.3) を使用して DATE からスカラーを抽出するのと同じ方法で、INTERVALS からスカラーを抽出できるはずです。

<extract expression> は日時または間隔で動作し、日時または間隔の 1 つのコンポーネントの値を表す正確な数値を返します。

ただし、これはほとんどのデータベースで非常に不十分に実装されています。データベース固有のものを使用している可能性があります。DATEDIFF は、さまざまなプラットフォームでうまく実装されています。

これが「本当の」やり方です。

SELECT EXTRACT(DAY FROM DATE '2009-01-01' - DATE '2009-05-05') FROM DUAL;

幸運を!

于 2009-11-25T22:31:48.453 に答える
3

DATE1-DATE2 をサポートしていない RDBMS を使用したことを覚えていませんが、SQL 92は同意しているようです。

于 2009-11-25T22:26:29.357 に答える
1

SQL-92 標準では、'-' 演算子を使用した 2 つの日付の減算がサポートされていると思います。

于 2009-11-25T22:25:24.900 に答える
0

SQL 92 は、次の構文をサポートしています。

t.date_1 - t.date_2

EXTRACT 関数も ANSI ですが、SQL Server ではサポートされていません。例:

ABS(EXTRACT(DAY FROM t.date_1) - EXTRACT(DAY FROM t.date_2)

絶対値関数で計算をラップすると、最初の日付が小さい日付であっても、値が正の値になることが保証されます。

EXTRACT は以下でサポートされています。

  • オラクル 9i+
  • MySQL
  • ポストグル
于 2009-11-25T22:30:22.383 に答える