MONTHS_BETWEEN 函数接受两个 DATE 或 DATETIME 表达式参数,并返回一个带符号的 DECIMAL 值,该值量化这些参数之间的月数间隔,就好像 month 是时间的单位一样。
此函数需要两个参数,每一参数可为 DATE 表达式或 DATETIME 表达式。
返回的值为 DECIMAL 数据类型,表示两个参数之间的差异,表达为基于 31 天为单位的 DECIMAL 值。如果第一个参数是晚于第二个参数的时间点,则返回的值的符号为正。如果第一个参数早于第二个参数,则返回的值的符号为负。如果两个参数相等,则返回值为零。
如果两个参数的日期都是一个月的同一天,或都是一个月的最后一天,则结果为整数。否则,基于一个月 31 天,来计算结果的小数部分。此小数部分还可包括 hour、minute 和 second 时间单位中的差异,除非两个参数都是 DATE 表达式。
下列查询使用通过 TO_DATE 表达式作为参数返回的两个 DATE 值,调用 Projection 子句中的 MONTHS_BETWEEN 函数。
SELECT MONTHS_BETWEEN(TO_DATE('2-2-2005', '%m-%d-%Y'), TO_DATE('1-1-2005', '%m-%d-%Y')) AS lunations FROM systables WHERE tabid = 1;
months 1.03225806451613
SELECT d_datetime, e_datetime, MONTHS_BETWEEN(d_datetime, e_datetime) AS months_between FROM mytab1; d_datetime 2007-11-01 09:00:00.00000 e_datetime 2007-12-07 14:30:12.12345 months_between -1.2009453405018 d_datetime 2007-12-13 09:40:30.00000 e_datetime 2007-11-13 08:40:30.00000 months_between 1.00000000000000在此,第一个 MONTHS_BETWEEN 结果包括以小于天的时间单位计的差异。第二个结果没有小数部分,因为两个参数的 day 时间单位有相同的值。
SELECT col_datetime, col_date, MONTHS_BETWEEN(col_datetime, col_date) AS months_between FROM mytab2; col_datetime 2008-12-13 08:40:30.00000 col_date 11/13/2007 months_between 13.0000000000000由于两个参数指定该月的同一天,因此结果没有小数部分。