日期/时间函数

下表介绍了日期/时间功能。
表 1. 日期/时间函数
类型 描述
add_months(date,n) 返回 "date对应的日期加上整数 "n对应的月数。 如果结果日期的天数多于结果月份的天数,则结果为该月份的最后一天。 否则,生成的日期与 "date的日期成分相同。 例如:
add_months('March 03, 2015',2) 返回 "'2015-05-03 00:00:00'""
""add_months('March 31, 2015',-1)返回 "'2015-02-28 00:00:00'
age(ts,ts)
age(ts)
返回两个时间戳之间的时间间隔。 返回值的精度与最精确参数的精度相同。 例如:
  • select age('10-22-2003', '7-6-2002') 返回: '1 year 3 mons 16 days'
  • select age('10-22-2003 09:46:07.325', '7-6-2002') 返回: '1 year 3 mons 16 days 09:46:07.325'
如果只指定一个参数,函数将返回当前时间与指定时间戳之间的时间间隔。 这相当于 "age(CURRENT_TIMESTAMP, ts)

Netezza Performance ServerSQL 时间间隔支持是非标准的。

date_part(units,col) 从为 "col指定的日期/时间值、时间间隔或持续时间中提取 "units所代表的子字段。 该功能等同于 "extract()
date_trunc(units,date) 将 "date指定的日期截断到 "units指定的精度。
extract(units FROM col) 从为 "col指定的日期/时间值、时间间隔或持续时间中提取 "units所代表的子字段。 该功能等同于 "date_part()
last_day(date) 返回指定日期月份的最后一天。
months_between(d1,d2) 返回日期 "d1和 "d2之间的月份数:
  • 如果 "d1晚于 "d2,则结果为正。
  • 如果 "d1早于 "d2,则结果为负数。
  • 如果 "d1和 "d2是每月的同一天或都是各自月份的最后一天,结果就是一个整数。
  • 否则,结果将包括以 31 天月为基础的小数部分。
例如:
  • select months_between('2015-05-23', '2015-04-23') 返回: 1
  • select months_between('2015-02-28', '2015-05-31') 返回: -3
  • select months_between('2015-05-15', '2014-05-05')返回 "12.322580645(12 个整月,外加 10 天;10/31=00.322580645。)
next_day(date,weekday) 返回特定日期之后工作日的日期。 date参数可以是日期或时间戳。 返回值的格式与参数 "date的格式相同。

weekday参数是由三个或三个以上字符组成的字符串,表示要返回日期的星期("SUN"、"MON"、"TUE"、"WED"、"THU"、"FRI"、"SAT")。 必须用单引号括起来,可以包含大写或小写字母。 第三个字符后指定的任何字符都将被忽略。 例如,2013 年 12 月 25 日星期三之后的第一个星期六是 2013 年 12 月 28 日:

select next_day('12-25-2013','Saturday') 返回: '2013-12-28'

now() 该函数与 current_timestamp 相同。 更多信息,请参阅转换功能
overlaps(a,b,c,d) 确定两个时间间隔是否重叠。 的数据类型:
  • 参数 a 和 c 可以是 TIME 或 TIMESTAMP,但两者必须相同
  • 参数 b 和 d 可以是 "时间"、"带时区的时间 "或 "时间间隔 "中的一种,但两者必须相同
Netezza Performance ServerSQL 支持标准 SQL 重叠谓词。
duration_add(a,b) 返回两个参数(用 "a和 "b"表示)相加后的持续时间。 参数数据类型的有效组合见表 2
duration_subtract(a,b) 返回第二个参数(b)减去第一个参数(a")后的持续时间。表 3 列出了参数数据类型的有效组合。
timeofday() 该函数是 current_timestamp 的详细字符串版本。 例如,Mon 01 Dec 2014 16:12:05 EST。 输出格式由所使用的转换函数决定(参见转换函数)
timezone(timestamp from_tz to_tz) from_tz时区的输入时间戳值转换为to_tz时区的时间戳值。 例如:
select TIMEZONE(timestamp '2000-07-04 17:00:00', 'America/New_York', 
'America/Los_Angeles');
      TIMEZONE
---------------------
 2000-07-04 14:00:00
(1 row)

系统使用 ICU 库来验证和解析所提供的时区值。 有关程序 ID(如Canada/Newfoundland)或原始偏移值(如GMT-03:30)的更多信息,http://userguide.icu-project.org/datetime/timezone,以便可靠地指定时区。 如果函数无法解析查询中指定的时区,则查询失败,并显示信息ERROR: Time zone 'invalid_tz' not recognized.

表 2. duration_add 函数参数的有效数据类型组合
第一参数数据类型 第二参数数据类型 退货
日期 数值(8,0) 日期
时间 数值(6,0) 时间
时间戳记 数值(6,0) 时间戳记
数值(8,0)
数值(14,0)
数值(15,1)
数值(16,2)
数值(17,3)
数值(18,4)
数值(19,5)
数值(20,6)
表 3. 函数 duration_subtract 参数的有效数据类型组合
第一参数数据类型 第二参数数据类型 退货
日期 日期 数值(8,0)
数值(8,0) 日期
时间 时间 数值(6,0)
数值(6,0) 时间
时间戳记 时间戳记 数值(20,6)
数值(6,0) 时间戳记
数值(8,0)
数值(14,0)
数值(15,1)
数值(16,2)
数值(17,3)
数值(18,4)
数值(19,5)
数值(20,6)
第二个参数或 duration_add 或 duration_subtract 函数的返回值:
  • 数值(6,0)类型表示 hhmmss 形式的持续时间,例如 030745 表示 3 小时 7 分钟 45 秒。
  • 数值(8,0)类型表示 YYYYMMDD 形式的持续时间,例如 00020525 表示 2 年 5 个月 25 天。
  • 其他数值包含 14-20 位数字:
    • 前 8 位数字表示持续时间的日期部分,格式为 YYYYMMDD。
    • 接下来的 6 个数字以 hhmmss 格式表示持续时间的时间部分。
    • 接下来的 0-6 位数字表示几分之一秒。
    例如,持续时间 "00010521010521999::numeric(17,3)表示 1 年 5 个月 21 天 1 小时 5 分钟21.999秒。