この関数に渡される式には、次のいずれかのデータ型が含まれている必要があります。
DATE、TIMESTAMP、またはTIMESTAMP WITH TIME ZONE
MONTHS_BETWEENに渡す2つの引数は、上記の3つのデータ型のいずれでもかまいませんが、この2つの引数を同じデータ型にする必要があります。例えば、第1パラメータとしてDATE、第2パラメータとしてTIMESTAMPを渡すことはできません。
TIMESTAMP値は、UTC時間でデータベースに格納されるためタイムゾーンが欠けています。そのため、この関数内ではタイム スタンプ値の解釈にセッションのタイムゾーンを使用します。TIMESTAMP WITH TIME ZONE値の場合、この関数内ではタイム スタンプ値の解釈にタイムゾーン構成要素を使用します。
date_timestamp_value2が次の場合
- date_timestamp_value1以降では、結果は負になります。
- date_timestamp_value1以前では、結果は正になります。
date_timestamp_value1とdate_timestamp_value2が同じ日付の場合や、どちらもが月の最終日の場合、結果は常に整数になります。それ以外の場合、MONTHS_BETWEENは、結果の小数部分を1ヶ月を31日として計算し、date_timestamp_value1とdate_timestamp_value2の時間構成要素の差分を考えます。グレゴリオ暦がサポートされます。
タイムゾーンのないタイムスタンプは、ローカル タイムゾーンで比較されます。このことは、2つのタイムスタンプが同じ日にあるかどうか、または両方が月の最終日であるかどうかを判断する場合にのみ重要になります。タイムゾーンのあるタイムスタンプは、同じゾーンでの時刻になるように、比較の前にUTCに変換されます。