

 从补丁 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/)。

# 日期和时间函数
<a name="Date_functions_header"></a>

在本部分中，您可以找到 Amazon Redshift 支持的日期和时间标量函数的相关信息。

**Topics**
+ [日期和时间函数摘要](#date-functions-summary)
+ [事务中的日期和时间函数](#date-functions-transactions)
+ [弃用的仅领导节点函数](#date-functions-deprecated)
+ [\+（串联）运算符](r_DATE-CONCATENATE_function.md)
+ [ADD\_MONTHS 函数](r_ADD_MONTHS.md)
+ [AT TIME ZONE 函数](r_AT_TIME_ZONE.md)
+ [CONVERT\_TIMEZONE 函数](CONVERT_TIMEZONE.md)
+ [CURRENT\_DATE 函数](r_CURRENT_DATE_function.md)
+ [DATE\_CMP 函数](r_DATE_CMP.md)
+ [DATE\_CMP\_TIMESTAMP 函数](r_DATE_CMP_TIMESTAMP.md)
+ [DATE\_CMP\_TIMESTAMPTZ 函数](r_DATE_CMP_TIMESTAMPTZ.md)
+ [DATEADD 函数](r_DATEADD_function.md)
+ [DATEDIFF 函数](r_DATEDIFF_function.md)
+ [DATE\_PART 函数](r_DATE_PART_function.md)
+ [DATE\_PART\_YEAR 函数](r_DATE_PART_YEAR.md)
+ [DATE\_TRUNC 函数](r_DATE_TRUNC.md)
+ [EXTRACT 函数](r_EXTRACT_function.md)
+ [GETDATE 函数](r_GETDATE.md)
+ [INTERVAL\_CMP 函数](r_INTERVAL_CMP.md)
+ [LAST\_DAY 函数](r_LAST_DAY.md)
+ [MONTHS\_BETWEEN 函数](r_MONTHS_BETWEEN_function.md)
+ [NEXT\_DAY 函数](r_NEXT_DAY.md)
+ [SYSDATE 函数](r_SYSDATE.md)
+ [TIMEOFDAY 函数](r_TIMEOFDAY_function.md)
+ [TIMESTAMP\_CMP 函数](r_TIMESTAMP_CMP.md)
+ [TIMESTAMP\_CMP\_DATE 函数](r_TIMESTAMP_CMP_DATE.md)
+ [TIMESTAMP\_CMP\_TIMESTAMPTZ 函数](r_TIMESTAMP_CMP_TIMESTAMPTZ.md)
+ [TIMESTAMPTZ\_CMP 函数](r_TIMESTAMPTZ_CMP.md)
+ [TIMESTAMPTZ\_CMP\_DATE 函数](r_TIMESTAMPTZ_CMP_DATE.md)
+ [TIMESTAMPTZ\_CMP\_TIMESTAMP 函数](r_TIMESTAMPTZ_CMP_TIMESTAMP.md)
+ [TIMEZONE 函数](r_TIMEZONE.md)
+ [TO\_TIMESTAMP 函数](r_TO_TIMESTAMP.md)
+ [TRUNC 函数](r_TRUNC_date.md)
+ [日期或时间戳函数的日期部分](r_Dateparts_for_datetime_functions.md)

## 日期和时间函数摘要
<a name="date-functions-summary"></a>


| 函数 | 语法 | 返回值 | 
| --- | --- | --- | 
| [\+（串联）运算符](r_DATE-CONCATENATE_function.md)将日期连接到 \+ 符号任一侧的时间，并返回 TIMESTAMP 或 TIMESTAMPTZ。 | date \+ time | TIMESTAMP 或者 TIMESTAMPZ | 
| [ADD\_MONTHS](r_ADD_MONTHS.md)将指定的月数添加到日期或时间戳。 |  ADD\_MONTHS ({date\|timestamp}, integer) | TIMESTAMP | 
| [AT TIME ZONE](r_AT_TIME_ZONE.md)指定要与 TIMESTAMP 或 TIMESTAMPTZ 表达式一起使用的时区。 |  AT TIME ZONE 'timezone' | TIMESTAMP 或者 TIMESTAMPZ | 
| [CONVERT\_TIMEZONE](CONVERT_TIMEZONE.md)将一个时区的时间戳转换为另一个时区的时间戳。 | CONVERT\_TIMEZONE (['timezone',] 'timezone', timestamp) | TIMESTAMP | 
| [CURRENT\_DATE](r_CURRENT_DATE_function.md)返回当前事务开始时的当前会话时区（预设情况下为 UTC）中的日期。 | CURRENT\_DATE | DATE | 
| [DATE\_CMP](r_DATE_CMP.md)比较两个日期，并在日期相同时返回 `0`，*date1* 较大时返回 `1`，*date2* 较大时返回 `-1`。 | DATE\_CMP (date1, date2) | INTEGER | 
| [DATE\_CMP\_TIMESTAMP](r_DATE_CMP_TIMESTAMP.md)将日期与时间进行比较，并在值相同时返回 `0`，*date* 较大时返回 `1`，*timestamp* 较大时返回 `-1`。 | DATE\_CMP\_TIMESTAMP (date, timestamp) | INTEGER | 
| [DATE\_CMP\_TIMESTAMPTZ](r_DATE_CMP_TIMESTAMPTZ.md)将日期与带有时区的时间戳进行比较，并在值相同时返回 `0`，*date* 较大时返回 `1`，*timestamptz* 较大时返回 `-1`。 | DATE\_CMP\_TIMESTAMPTZ (date, timestamptz) | INTEGER | 
| [DATE\_PART\_YEAR](r_DATE_PART_YEAR.md)从日期中提取年份。 | DATE\_PART\_YEAR (date) | INTEGER | 
| [DATEADD](r_DATEADD_function.md)按指定的时间间隔递增日期或时间。 | DATEADD (datepart, interval, {date\|time\|timetz\|timestamp}) | TIMESTAMP、TIME 或 TIMETZ | 
| [DATEDIFF](r_DATEDIFF_function.md)返回给定日期部分（如一天或月）的两个日期或时间之间的差值。 | DATEDIFF (datepart, {date\|time\|timetz\|timestamp}, {date\|time\|timetz\|timestamp}) | BIGINT | 
| [DATE\_PART](r_DATE_PART_function.md)从日期或时间中提取日期部分值。 | DATE\_PART (datepart, {date\|timestamp}) | DOUBLE | 
| [DATE\_TRUNC](r_DATE_TRUNC.md)基于日期部分截断时间戳。 | DATE\_TRUNC ('datepart', timestamp) | TIMESTAMP | 
| [EXTRACT](r_EXTRACT_function.md)从 timestamp、timestamptz、time 或 timetz 中提取日期或时间部分。 | EXTRACT (datepart FROM source) | INTEGER or DOUBLE | 
| [GETDATE](r_GETDATE.md)返回当前会话时区（预设情况下为 UTC）中的当前日期和时间。括号为必填项。 | GETDATE() | TIMESTAMP | 
| [INTERVAL\_CMP](r_INTERVAL_CMP.md)比较两个时间间隔，并在时间间隔相等时返回 `0`，*interval1* 较大时返回 `1`，*interval2* 较大时返回 `-1`。 | INTERVAL\_CMP (interval1, interval2) | INTEGER | 
| [LAST\_DAY](r_LAST_DAY.md)返回该月最后一天的日期，该日期包含 *date*。 | LAST\_DAY(date) | DATE | 
| [MONTHS\_BETWEEN](r_MONTHS_BETWEEN_function.md)返回两个日期之间相隔的月数。 | MONTHS\_BETWEEN (date, date) | FLOAT8 | 
| [NEXT\_DAY](r_NEXT_DAY.md)返回比 *date* 晚的*日期*的第一个实例的日期。 | NEXT\_DAY (date, day) | DATE | 
| [SYSDATE](r_SYSDATE.md)返回当前事务开始的日期和时间 (UTC)。 | SYSDATE | TIMESTAMP | 
| [TIMEOFDAY](r_TIMEOFDAY_function.md)以字符串值形式返回当前会话时区（预设情况下为 UTC）中的当前工作日、日期和时间。 | TIMEOFDAY() | VARCHAR | 
| [TIMESTAMP\_CMP](r_TIMESTAMP_CMP.md)将两个时间戳值进行比较，并在值相同时返回 `0`，在 *timestamp1* 较大时返回 `1`，在 *timestamp2* 较大时返回 `-1`。 | TIMESTAMP\_CMP (timestamp1, timestamp2) | INTEGER | 
| [TIMESTAMP\_CMP\_DATE](r_TIMESTAMP_CMP_DATE.md)将时间戳与日期进行比较，并在值相同时返回 `0`，*timestamp* 较大时返回 `1`，*date* 较大时返回 `-1`。 | TIMESTAMP\_CMP\_DATE (timestamp, date) | INTEGER | 
| [TIMESTAMP\_CMP\_TIMESTAMPTZ](r_TIMESTAMP_CMP_TIMESTAMPTZ.md)将时间戳与带有时区的时间戳进行比较，并在值相同时返回 `0`，*timestamp* 较大时返回 `1`，*timestamptz* 较大时返回 `-1`。 | TIMESTAMP\_CMP\_TIMESTAMPTZ (timestamp, timestamptz) | INTEGER | 
| [TIMESTAMPTZ\_CMP](r_TIMESTAMPTZ_CMP.md)将两个带有时区的时间戳值进行比较，并在值相同时返回 `0`，*timestamptz1* 较大时返回 `1`，*timestamptz2* 较大时返回 `-1`。 | TIMESTAMPTZ\_CMP (timestamptz1, timestamptz2) | INTEGER | 
| [TIMESTAMPTZ\_CMP\_DATE](r_TIMESTAMPTZ_CMP_DATE.md)将带有时区的时间戳值与日期进行比较，并在值相同时返回 `0`，*timestamptz* 较大时返回 `1`，*date* 较大时返回 `-1`。 | TIMESTAMPTZ\_CMP\_DATE (timestamptz, date) | INTEGER | 
| [TIMESTAMPTZ\_CMP\_TIMESTAMP](r_TIMESTAMPTZ_CMP_TIMESTAMP.md)将带有时区的时间戳与时间戳进行比较，并在值相同时返回 `0`，*timestamptz* 较大时返回 `1`，*timestamp* 较大时返回 `-1`。 | TIMESTAMPTZ\_CMP\_TIMESTAMP (timestamptz, timestamp) | INTEGER | 
| [TIMEZONE](r_TIMEZONE.md)返回指定时区和时间戳值的一个时间戳。 | TIMEZONE ('timezone' { timestamp \| timestamptz ) | TIMESTAMP 或者 TIMESTAMPTZ | 
| [TO\_TIMESTAMP](r_TO_TIMESTAMP.md)返回指定时间戳和时区格式的一个带有时区的时间戳。 | TO\_TIMESTAMP ('timestamp', 'format') | TIMESTAMPTZ | 
| [TRUNC](r_TRUNC_date.md)截断时间戳并返回日期。 | TRUNC(timestamp) | DATE | 

**注意**  
在经过时间计算中不考虑闰秒。

## 事务中的日期和时间函数
<a name="date-functions-transactions"></a>

当您在事务块（BEGIN … END）中运行以下函数时，该函数将返回当前事务的开始日期或时间，而不是当前语句的开始时间。
+ SYSDATE
+ TIMESTAMP
+ CURRENT\_DATE

以下函数始终返回当前语句的开始日期或时间，即使它们在事务数据块中也是如此。
+ GETDATE
+ TIMEOFDAY

## 弃用的仅领导节点函数
<a name="date-functions-deprecated"></a>

以下日期函数因为仅在领导节点上运行而遭到弃用。有关更多信息，请参阅 [仅领导节点函数](c_SQL_functions_leader_node_only.md)。
+ AGE。请改用 [DATEDIFF 函数](r_DATEDIFF_function.md)。
+ CURRENT\_TIME。改用 [GETDATE 函数](r_GETDATE.md) 或 [SYSDATE](r_SYSDATE.md)。
+ CURRENT\_TIMESTAMP。改用 [GETDATE 函数](r_GETDATE.md) 或 [SYSDATE](r_SYSDATE.md)。
+ LOCALTIME。改用 [GETDATE 函数](r_GETDATE.md) 或 [SYSDATE](r_SYSDATE.md)。
+ LOCALTIMESTAMP。改用 [GETDATE 函数](r_GETDATE.md) 或 [SYSDATE](r_SYSDATE.md)。
+ ISFINITE 
+ NOW。改用 [GETDATE 函数](r_GETDATE.md) 或 [SYSDATE](r_SYSDATE.md)。如果在实体化视图中使用 NOW 函数，则它将设置为创建实体化视图的时间戳，而不是当前的时间戳。