打印      打开 PDF 版本的联机帮助


上一主题

下一主题

日历日期/时间函数

日历日期/时间函数处理日期、时间和时间戳数据类型的数据。(时间戳数据类型是日期和时间的组合。)

所有日期函数均符合 ISO 8601 规定。这尤其影响 Week_Of_Year 和 Week_Of_Quarter 函数,其中年度初始周为包括星期四的完整的第一周。有关如何计算日期函数的详细信息,请查阅 ISO 8601 标准。

Current_Date

返回当前日期。日期由计算机确定。该值不包含时间部分。

语法:

CURRENT_DATE

Current_Time

返回当前时间。时间由计算机确定。值不能包含日期组成部分。

注意:此函数获取运行报表时的当前时间。将此函数与分析 主题区域结合使用,可以防止缓存报表,但这也降低了性能。

语法:

CURRENT_TIME (n)

其中:

n

任何表示精度(使用该精度显示不到 1 秒的时间)位数的整数。该参数是可选的;当未指定任何参数时,函数返回默认精度。

Current_TimeStamp

返回当前日期/时间戳。时间戳由计算机确定。

注意:此函数获取运行报表时的当前时间。将此函数与分析 主题区域结合使用,可以防止缓存报表,但这也降低了性能。

语法:

CURRENT_TIMESTAMP (n)

其中:

n

任何表示精度(使用该精度显示不到 1 秒的时间)位数的整数。该参数是可选的;当未指定任何参数时,函数返回默认精度。

Day_Of_Quarter

返回一个数字(在 1 到 92 之间),该数字对应于指定日期是季度中的第几天。

语法:

DAY_OF_QUARTER (date_expression)

其中:

date_expression

计算结果为日期的任何表达式。

DayName

返回指定日期的星期日期名称(以英文表示)。

语法:

DAYNAME (date_expression)

其中:

date_expression

计算结果为日期的任何表达式。

DayOfMonth

返回一个数字,该数字对应于指定日期是月份中的第几天。

语法:

DAYOFMONTH (date_expression)

其中:

date_expression

计算结果为日期的任何表达式。

DayOfWeek

返回一个数字(在 1 到 7 之间),该数字对应于指定日期是星期中的第几天。数字 1 对应于星期天,数字 7 对应于星期六。

语法:

DAYOFWEEK (date_expression)

其中:

date_expression

计算结果为日期的任何表达式。

DayOfYear

返回一个数字(在 1 到 366 之间),该数字对应于指定日期是一年中的第几天。

语法:

DAYOFYEAR (date_expression)

其中:

date_expression

计算结果为日期的任何表达式。

Hour

返回一个数字(在 0 到 23 之间),该数字对应于指定时间是一天中的第几个小时。例如,0 对应于凌晨 12 点,23 对应于晚上 11 点。

语法:

HOUR (time_expression)

其中:

time_expression

计算结果为时间的任何表达式。

Minute

返回一个数字(在 0 到 59 之间),该数字对应于指定时间是一小时中的第几分钟。

语法:

MINUTE (time_expression)

其中:

time_expression

计算结果为时间的任何表达式。

Month

返回一个数字(在 1 到 12 之间),该数字对应于指定日期的月份。

语法:

MONTH (date_expression)

其中:

date_expression

计算结果为日期的任何表达式。

Month_Of_Quarter

返回一个数字(在 1 到 3 之间),该数字对应于指定日期是季度中的第几个月。

语法:

MONTH_OF_QUARTER (date_expression)

其中:

date_expression

计算结果为日期的任何表达式。

MonthName

返回指定日期的月份名称(以英文表示)。

语法:

MONTHNAME (date_expression)

其中:

date_expression

计算结果为日期的任何表达式。

Now

返回当前时间戳。NOW 函数等效于 CURRENT_TIMESTAMP 函数。

注意:此函数获取运行报表时的当前时间。将此函数与分析 主题区域结合使用,可以防止缓存报表,但这也降低了性能。

语法:

NOW ()

Quarter_Of_Year

返回一个数字(在 1 到 4 之间),该数字对应于指定日期是一年中的第几个季度。

语法:

QUARTER_OF_YEAR (date_expression)

其中:

date_expression

计算结果为日期的任何表达式。

Second

返回一个数字(在 0 到 59 之间),该数字对应于指定时间是一分钟中的第几秒。

语法:

SECOND (time_expression)

其中:

time_expression

计算结果为时间的任何表达式。

TimestampAdd

TimestampAdd 函数向指定时间戳添加指定数目的间隔。返回单个时间戳。

语法:

TimestampAdd (interval, integer_expression, timestamp_expression)

其中:

interval

指定的间隔。有效值包括:

SQL_TSI_SECOND

SQL_TSI_MINUTE

SQL_TSI_HOUR

SQL_TSI_DAY

SQL_TSI_WEEK

SQL_TSI_MONTH

SQL_TSI_QUARTER

SQL_TSI_YEAR

integer_expression

计算结果为整数的任何表达式。这是要添加的间隔数目。

timestamp_expression

计算中用作基数的时间戳。

向此函数传递空整数表达式或空时间戳表达式将产生空返回值。

在最简单的情形中,此函数只是根据间隔向时间戳的适当部分添加指定的整数值 (integer_expression)。添加一星期将转换为添加 7 天,添加一季度将转换为添加 3 个月。负整数值将执行减法操作(时间上回溯)。

指定的部分溢出(例如超过 60 秒、24 小时、12 个月等)将需要向下一部分添加适当的数量。例如,当向时间戳的天部分执行添加时,此函数将考虑溢出和特定月份的天数(包括闰年的二月有 29 天)。

当向时间戳的月部分执行添加时,此函数将验证结果时间戳的天部分是否有足够的天数。例如,向 2000-05-31 添加 1 个月的结果不是 2000-06-31,这是因为六月没有 31 天。此函数会将天部分减少至该月的最后一天,在本例中为 2000-06-30。

对于月部分涉及二月并且天部分为 29(即闰年中二月的最后一天)的时间戳,添加年部分时也会产生类似的问题。如果结果时间戳不在闰年中,则函数会将天部分减少到 28。

以下是 TimestampAdd 函数的示例:

以下代码示例计算向 2000-02-27 14:30:00 添加 3 天后的结果时间戳。由于是 2000 年是闰年,因此该示例返回一个时间戳 2000-03-01 14:30:00。

TimestampAdd(SQL_TSI_DAY, 3, TIMESTAMP‘2000-02-27 14:30:00’)

以下代码示例计算向 1999-07-31 0:0:0 添加 7 个月的结果时间戳。此示例返回单个时间戳 2000-02-29 00:00:00。请注意因为二月天数较少,所以将天部分减少到 29。

TimestampAdd(SQL_TSI_MONTH, 7, TIMESTAMP‘1999-07-31 00:00:00’)

以下代码示例计算向 2000-07-31 23:35:00 添加 25 分钟的结果时间戳。此示例返回单个时间戳 2000-08-01 00:00:00。请注意溢出向月部分的传播。

TimestampAdd(SQL_TSI_MINUTE, 25, TIMESTAMP‘2000-07-31 23:35:00’)

TimeStampDiff

TimestampDiff 函数返回两个时间戳之间指定间隔的总数。

语法:

TimestampDiff (interval, timestamp_expression1, timestamp_expression2)

其中:

interval

指定的间隔。有效值包括:

SQL_TSI_SECOND

SQL_TSI_MINUTE

SQL_TSI_HOUR

SQL_TSI_DAY

SQL_TSI_WEEK

SQL_TSI_MONTH

SQL_TSI_QUARTER

SQL_TSI_YEAR

timestamp_expression1

从第二个时间戳减去的时间戳。

timestamp_expression2

第二个时间戳。从此时间戳中减去 timestamp_expression1 以确定差值。

向此函数传递空时间戳表达式参数将产生空返回值。

此函数先确定对应于指定间隔参数的时间戳部分。例如,SQL_TSI_DAY 对应于天部分,SQL_TSI_MONTH 对应于月部分。

随后函数考虑两个时间戳中顺序较高的部分以计算每个时间戳的间隔总数。例如,如果指定的间隔对应于月部分,则函数通过将年部分乘以 12 并和月部分相加计算每个时间戳月份的总数。

最后,函数从第二个时间戳的间隔总数减去第一个时间戳的间隔总数。

当计算日期上的差值时,函数截断两个时间戳表达式中的时间值,然后减去日期值。

当计算星期上的差值时,函数计算天的差值并在取整前除以 7。

当计算季度上的差值时,函数计算月的差值并在取整前除以 3。

当计算年度上的差值时,函数计算月的差值并在取整前除以 12。

TimestampDiff 函数和结果示例

以下代码示例计算时间戳 1998-07-31 23:35:00 和 2000-04-01 14:24:00 之间的天差值。它返回值 610。请注意,2000 年是闰年,所以结果中多一天。

TimestampDIFF(SQL_TSI_DAY, TIMESTAMP‘1998-07-31 23:35:00’, TIMESTAMP‘2000-04-01 14:24:00’)

Week_Of_Quarter

返回一个数字(在 1 到 13 之间),该数字对应于指定日期是季度中的第几个星期。

语法:

WEEK_OF_QUARTER (date_expression)

其中:

date_expression

计算结果为日期的任何表达式。

Week_Of_Year

返回一个数字(在 1 到 53 之间),该数字对应于指定日期是一年中的第几个星期。

语法:

WEEK_OF_YEAR (date_expression)

其中:

date_expression

计算结果为日期的任何表达式。

年份

返回指定日期的年。

语法:

YEAR (date_expression)

其中:

date_expression

计算结果为日期的任何表达式。

例如:

YEAR (CURRENT_DATE)


已发布 8月 2018 Copyright © 2005, 2018, Oracle. 保留所有权利。Legal Notices.