ROUND_TIMESTAMP 标量函数

ROUND_TIMESTAMP标量函数返回一个时间戳,该时间戳被四舍五入到时间戳格式字符串指定的单位。 如果未指定格式字符串 ,则表达式将四舍五入到最近的一天,就像为格式字符串指定了“DD”一样。

阅读语法图跳过可视化语法图ROUND_TIMESTAMP(表达式 ,“DD”,格式化字符串 )

该模式是 SYSIBM。

表达式
FL 507 返回以下任何内置数据类型的值的表达式:日期、时间戳、字符串或图形字符串。 如果表达式是一个字符串或图形字符串,则它不能是CLOB或DBCLOB,其值必须是一个有效的时间戳字符串表示形式,实际长度不能超过255字节。 时间戳字符串表示中的时区将被忽略。 有关日期和时间戳的字符串表示形式的有效格式,请参阅日期时间值的字符串表示形式
仅直通支持: FL 507 如果表达式是日期, Db2 将函数传递给 IBM® Db2 Analytics Accelerator 作为仅传递表达式。 更多信息,请参阅 《使用仅传递表达式加速查询 》。
format-string
返回内置字符串或图形字符串数据类型的表达式,其长度不超过255字节。 format-string 包含一个模板,用于说明如何对表达式表示的时间戳进行四舍五入。 例如,如果格式字符串为“DD”, 则表达式表示的时间戳将四舍五入到最近的一天。 format-string 必须是一个有效的模板,用于时间戳,且不能包含前导或尾随空格。

下表列出了格式字符串的允许值。

表 1. ROUND_TIMESTAMP和TRUNC_TIMESTAMP格式模型
格式化模型 格式模型舍入或截断说明 ROUND_TIMESTAMP 示例 TRUNC_TIMESTAMP示例
CC
SCC
世纪。

更改开始比四位年份中的前两位数字大。 更改结束

更改开始对于 ROUND_TIMESTAMP,以本世纪第 50 年为整数。更改结束

输入值:
1897-12-04-12.22.22.000000
结果:
1901-01-01-00.00.00.000000
输入值:
1897-12-04-12.22.22.000000
结果:
1801-01-01-00.00.00.000000
syyyy
yyyy
year
syear
yyy
yyy
y
年份。

更改开始对于 ROUND_TIMESTAMP,从 7 月 1 日起四舍五入到下一年的 1 月 1 日。更改结束

输入值:
1897-12-04-12.22.22.000000
结果:
1898-01-01-00.00.00.000000
输入值:
1897-12-04-12.22.22.000000
结果:
1897-01-01-00.00.00.000000
iyyy
iyyy
iy
i
ISO年份。

更改开始对于ROUND_TIMESTAMP,7月1日四舍五入到下一个ISO年份的第一天。 ISO 年的第一天定义为第一个 ISO 周的星期一。更改结束

输入值:
1897-12-04-12.22.22.000000
结果:
1898-01-03-00.00.00.000000
输入值:
1897-12-04-12.22.22.000000
结果:
1897-01-04-00.00.00.000000
Q 四分之一。

更改开始对于 ROUND_TIMESTAMP,四舍五入到季度第二个月的第 16 天。更改结束

输入值:
1999-06-04-12.12.30.000000
结果:
1999-07-01-00.00.00.000000
输入值:
1999-06-04-12.12.30.000000
结果:
1999-04-01-00.00.00.000000
month
mon
mm
rm
月。

更改开始对于 ROUND_TIMESTAMP,取整日期为每月的第 16 天。更改结束

输入值:
1999-06-18-12.12.30.000000
结果:
1999-07-01-00.00.00.000000
输入值:
1999-06-18-12.12.30.000000
结果:
1999-06-01-00.00.00.000000
全球 一周中作为一年的第一天的日期。

更改开始对于 ROUND_TIMESTAMP,在一周的第 4 天的第 12 个小时,相对于一年的第一天向上取整。更改结束

输入值:
2000-05-05-12.12.30.000000
结果:
2000-05-06-00.00.00.000000
输入值:
2000-05-05-12.12.30.000000
结果:
2000-04-29-00.00.00.000000
IW 一周中作为一个 ISO 年的第一天的日期。

更改开始对于 ROUND_TIMESTAMP,相对于 ISO 年的第一天,在每周第 4 天的 12 点向上取整。更改结束

输入值:
2000-05-05-12.12.30.000000
结果:
2000-05-08-00.00.00.000000
输入值:
2000-05-05-12.12.30.000000
结果:
2000-05-01-00.00.00.000000
W 一周中作为一个月的第一天的日期。

更改开始对于 ROUND_TIMESTAMP,相对于每月的第一天,每周第 4 天的 12 点向上取整。更改结束

输入值:
2000-06-21-12.12.30.000000
结果:
2000-06-22-00.00.00.000000
输入值:
2000-06-21-12.12.30.000000
结果:
2000-06-15-00.00.00.000000
DDD
DD
J
天。

更改开始对于 ROUND_TIMESTAMP,在一天的第 12 个小时向上取整。更改结束

输入值:
2000-05-17-12.59.59.000000
结果:
2000-05-18-00.00.00.000000
输入值:
2000-05-17-12.59.59.000000
结果:
2000-05-17-00.00.00.000000

DY
D
一周的开始日期。

更改开始对于 ROUND_TIMESTAMP,以一周中第 4 天的 12 点为基准向上取整。 一周的第一天总是星期天。更改结束

输入值:
2000-05-17-12.59.59.000000
结果:
2000-05-21-00.00.00.000000
输入值:
2000-05-17-12.59.59.000000
结果:
2000-05-14-00.00.00.000000
HH
HH12
HH24
小时。

更改开始对于ROUND_TIMESTAMP,以30分钟为整点。更改结束

输入值:
2000-05-17-23.59.59.000000
结果:
2000-05-18-00.00.00.000000
输入值:
2000-05-17-23.59.59.000000
结果:
2000-05-17-23.00.00.000000
MI 一分钟。

更改开始对于ROUND_TIMESTAMP,以30秒为整。更改结束

输入值:
2000-05-17-23.58.45.000000
结果:
2000-05-17-23.59.00.000000
输入值:
2000-05-17-23.58.45.000000
结果:
2000-05-17-23.58.00.000000
SS 其次,

更改开始对于ROUND_TIMESTAMP,在500000微秒时向上取整。更改结束

输入值:
2000-05-17-23.58.45.500000
结果:
2000-05-17-23.58.46.000000
输入值:
2000-05-17-23.58.45.500000
结果:
2000-05-17-23.58.45.000000

如果表达式没有数据类型为“无时区时间戳”,则按如下方式转换表达式

  • 如果表达式是带有时区的TIMESTAMP,则表达式将转换为不带有时区的TIMESTAMP,精度与表达式相同。
  • 否则, 表达式将转换为不带时区的TIMESTAMP(6)。

函数的结果与表达式转换后的数据类型相同。

结果可以为空; 如果任何自变量为空,那么结果为空值。

结果CCSID是参数编码方案的适当CCSID,结果子类型是CCSID的适当子类型。

示例

  • 将输入的时间戳设置为主机变量 RND_TMSTMP ,并取整到最接近的年份值。
       SET :RND_TMSTMP = ROUND_TIMESTAMP(TIMESTAMP_FORMAT('2000-08-14 17:30:00', 
                                                  'YYYY-MM-DD HH24:MI:SS'), 'YEAR');    
    设置的值为“ 2001-01-01-00.00.00.000000 ”。
  • 假设 PRSTSZ 是一个SQL变量,其TIMESTAMP WITH TIME ZONE值为' 2008-04-15.20.00.000000-08:30 '。 输入值首先转换为不带时区的 TIMESTAMP(如 ' 2008-04-15.20.00.000000 '),用于ROUND_TIMESTAMP 函数。
    SELECT ROUND_TIMESTAMP(PRSTSZ) 
    	FROM PROJECT;
    ROUND_TIMESTAMP函数返回一个不含时区的TIMESTAMP值,即' 2008-04-16.00.00.000000 '。