

 从补丁 198 开始，Amazon Redshift 将不再支持创建新的 Python UDF。现有的 Python UDF 将继续正常运行至 2026 年 6 月 30 日。有关更多信息，请参阅[博客文章](https://www.amazonaws.cn/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)。

# MONTHS\$1BETWEEN 函数
<a name="r_MONTHS_BETWEEN_function"></a>

MONTHS\$1BETWEEN 确定两个日期之间相隔的月数。

如果第一个日期晚于第二个日期，则结果为正；否则，结果为负数。

如果任一参数为 null，则结果为 NULL。

## 语法
<a name="r_MONTHS_BETWEEN_function-synopsis"></a>

```
MONTHS_BETWEEN( date1, date2 )
```

## 参数
<a name="r_MONTHS_BETWEEN_function-arguments"></a>

 *date1*   
数据类型为 `DATE` 的列，或一个隐式计算结果为 `DATE` 类型的表达式。

 *date2*   
数据类型为 `DATE` 的列，或一个隐式计算结果为 `DATE` 类型的表达式。

## 返回类型
<a name="r_MONTHS_BETWEEN_function-return-type"></a>

FLOAT8

结果的整数部分基于日期的年份和月份值之间的差值。结果的小数部分根据日期的日期和时间戳值计算，假定一个月为 31 天。

如果 *date1* 和 *date2* 都包含一个月内的相同日期（例如，1/15/14 和 2/15/14）或该月的最后一天（例如 8/31/14 和 9/30/14），则结果是基于日期的年份和月份值的整数，无论时间戳部分是否匹配（如果存在）。

## 示例
<a name="r_MONTHS_BETWEEN_function-examples"></a>

以下示例返回 1969 年 1 月 18 日至 1969 年 3 月 18 日之间的月份。

```
select months_between('1969-01-18', '1969-03-18')
as months;

months
----------
-2
```

以下示例返回 1969 年 1 月 18 日至 1969 年 1 月 18 日之间的月数。

```
select months_between('1969-01-18', '1969-01-18')
as months;

months
----------
0
```

 以下示例返回事件的第一个和最后一个展示之间的月份。

```
select eventname, 
min(starttime) as first_show,
max(starttime) as last_show,
months_between(max(starttime),min(starttime)) as month_diff
from event 
group by eventname
order by eventname
limit 5;

eventname         first_show             last_show              month_diff
---------------------------------------------------------------------------
.38 Special       2008-01-21 19:30:00.0  2008-12-25 15:00:00.0  11.12
3 Doors Down      2008-01-03 15:00:00.0  2008-12-01 19:30:00.0  10.94
70s Soul Jam      2008-01-16 19:30:00.0  2008-12-07 14:00:00.0  10.7
A Bronx Tale      2008-01-21 19:00:00.0  2008-12-15 15:00:00.0  10.8
A Catered Affair  2008-01-08 19:30:00.0  2008-12-19 19:00:00.0  11.35
```