暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

华为GaussDB T 时间日期函数

墨天轮 2019-10-12
6930

时间日期函数

说明:
  • 年份支持范围[1,9999]。
  • 1582年10月5日–14日在历史上不存在,该问题不做处理。

ADD_MONTHS

语法:

ADD_MONTHS(date, n) ADD_MONTHS(datetime_string, n)

功能:返回date加(n>0)或减(n<0)n个月后的值。

  • add_month的第一个参数可以是一个日期类型(date/timestamp),也可以是一个日期字符串,格式需遵循nls_date_format。
  • 第二个参数为int32的整数类型,接受的输入为数值类型,或可以转换为数值类型的字符串,若输入的为浮点数,该输入将被舍弃小数部分的方式转换为int32整数,若输入超出int32的范围,则做报错处理。

说明:

  • 如果函数中的天数是当月的最后一天,则返回值中的日期也为该月的最后一天。例如:
    SELECT ADD_MONTHS(to_date('2016-02-29','yyyy-mm-dd'),1) from SYS_DUMMY; ADD_MONTHS(TO_DATE('2016-02-29','YYYY-MM-DD'),1) ------------------------------------------------ 2016-03-31 00:00:00 1 rows fetched.
  • 如果函数中结果月份的天数比开始月份的天数少,那么也会向回调整以适应有效日期。例如:
    SELECT ADD_MONTHS(to_date('2016-01-30','yyyy-mm-dd'),1) from SYS_DUMMY; ADD_MONTHS(TO_DATE('2016-01-30','YYYY-MM-DD'),1) ------------------------------------------------ 2016-02-29 00:00:00 1 rows fetched.

示例:

返回2018年3月2日开始1个月后的日期。

SELECT ADD_MONTHS(to_date('2018-03-02','yyyy-mm-dd'),1) from SYS_DUMMY; ADD_MONTHS(TO_DATE('2018-03-02','YYYY-MM-DD'),1) ------------------------------------------------ 2018-04-02 00:00:00 1 rows fetched.

CURRENT_TIMESTAMP

语法:

CURRENT_TIMESTAMP(fractional_second_precision)

功能:获取当前系统时间及时区,返回值类型为timestamp with time zone,和sessiontimezone相同。

说明:current_timestamp是系统保留字,表示获取当前系统时间戳以及当前客户端的时区,而current_timestamp(prec)是函数,prec表示秒后面小数位数的精度,取值范围为[0~6],且必须为整数常量。current_timestamp(prec)也可以不带参数,即写为current_timestamp(),这时prec的值默认为6。

示例:

返回当前系统时间及时区。

-- 获取当前系统时间和时区。 SELECT CURRENT_TIMESTAMP() FROM SYS_DUMMY; CURRENT_TIMESTAMP() ---------------------------------------- 2019-04-12 16:53:37.160018 +08:00 1 rows fetched.
-- 获取当前系统时间,秒后面小数位数精度为4。 SELECT CURRENT_TIMESTAMP(4) FROM SYS_DUMMY; CURRENT_TIMESTAMP(4) ---------------------------------------- 2019-04-12 17:18:37.3949 +08:00 1 rows fetched.
--修改当前时区。 ALTER SESSION SET TIME_ZONE = '+6:00'; Succeed.
--获取当前时间和时区。 SELECT CURRENT_TIMESTAMP () FROM SYS_DUMMY; CURRENT_TIMESTAMP () ---------------------------------------- 2019-04-12 15:45:26.050131 +06:00 1 rows fetched.
--获取当前时间和时区,秒后的小数位数精度是4。 SELECT CURRENT_TIMESTAMP(4) FROM SYS_DUMMY; CURRENT_TIMESTAMP(4) ---------------------------------------- 2019-04-12 16:47:22.9578 +06:00 1 rows fetched.

EXTRACT

语法:

EXTRACT(field FROM datetime)

功能:从指定的日期中(datetime)中提取指定的时间字段(field)。

其中field的取值范围有:YEAR,MONTH,DAY,HOUR,MINUTE,SECOND。返回值:NUMBER。

说明:

  • 如果field取值SECOND,返回值是浮点数类型,其中整数部分为秒,小数部分为微秒。
  • 将任何数值类型或任何可以隐式转换为数值类型的非数值类型作为参数。函数返回与参数相同的数据类型。

示例:

从指定日期中提取月份。

SELECT EXTRACT (MONTH from date '2018-10-04'); EXTRACT (MONTH FROM DATE '2018-10-04') -------------------------------------- 10 1 rows fetched.

FROM_UNIXTIME

语法:

FROM_UNIXTIME(unix_timestamp) FROM_UNIXTIME(unix_timestamp,format)

功能:GaussDB 100根据Unix时间戳返回日期datetime。

说明:

  • FROM_UNIXTIME(unix_timestamp)

    入参是BIGINT数,支持数值型字符串。不带格式化字符串,默认返回格式为:YYYY-MM-DD HH:MM:SS,秒SS后面带有6位小数。

  • FROM_UNIXTIME(unix_timestamp,format)

    按照指定格式输出日期,不区分大小写,当前支持的格式如下:

    • %Y 4位数年份。
    • %D 每个月的第几天,不支持英文后缀。
    • %M月份英文名称。
    • %h小时,24小时制。
    • %i 分钟。
    • %s 秒。
    • %x4位数年份(周一是每周的第一天)。

示例:

返回时间戳1111885200对应的日期。

SELECT FROM_UNIXTIME(1111885200); FROM_UNIXTIME(1111885200) -------------------------------- 2005-03-27 09:00:00.000000 1 rows fetched.

GETUTCDATE

语法:

GETUTCDATE()

功能:返回当前UTC时间戳,同时带有UTC时区信息(即0时区)。

说明:

  • 默认返回格式为YYYY-MM-DD HH:MM:SS TIMEZONE,秒SS后面带有6位小数,TIMEZONE格式为TZH:TZM。
  • GETUTCDATE()函数无入参时,返回类型是timestamp with time zone,带有时区信息。

示例:

如果当前的北京时间(东八区)是2019-04-09 17:11:01,则查询当前UTC时间是:

SELECT GETUTCDATE(); GETUTCDATE() ---------------------------------------- 2019-04-09 09:11:01.838655 +00:00 1 rows fetched.

MONTHS_BETWEEN

语法:

MONTHS_BETWEEN(date1,date2)

功能:GaussDB 100计算两个日期(date1和date2)之间的月份差。

说明:

  • 如果date1和date2的day字段相同,或者都是当前月的最后一天,返回的值是一个整数。否则返回值包含小数部分,该小数部分等于两个日期的天数差除以31。
  • 如果date1大于date2,返回值为正数。如果date1小于date2,返回值为负数。
  • 入参是日期时间类型(DATE或者TIMESTAMP)。返回值是数值类型(NUMBER)。

示例:

两个日期之间的月份差。

SELECT MONTHS_BETWEEN (TO_DATE('10-12-2018','MM-DD-YYYY'), TO_DATE('07-25-2018','MM-DD-YYYY') ) "Months" FROM SYS_DUMMY; Months ---------------------------------------- 2.58064516129032258064516129032258064516 1 rows fetched.

NOW

语法:

now(fractional_second_precision)

功能:获取当前系统时间及时区。

说明:now是系统保留字表示获取当前系统时间戳以及当前客户端的时区,而now(prec)是函数,prec表示秒后面小数位数的精度,取值范围为0~6,且必须为整数常量。now(prec)也可以不带参数,即写为now(),这时prec的值默认为6。

示例:

返回当前系统时间,秒后面精确6位。

SELECT NOW() FROM SYS_DUMMY; NOW() ---------------------------------------- 2019-04-12 18:49:33.060337 +08:00 1 rows fetched.

SLEEP

语法

SLEEP(n_second)

功能:设置休眠时间。单位是秒。

说明:入参n_second必须是可以转为NUMBER的表达式,取值范围[1,999999999999]。

示例

设置休眠3秒。

示例1:

SELECT SLEEP(3) FROM SYS_DUMMY; SLEEP(3) -------- 1 rows fetched.
---------------------------------------- 2019-04-23 14:49:20.187932 +08:00
---------------------------------------- 2019-04-23 14:49:23.187932 +08:00

SYSTIMESTAMP

语法

SYSTIMESTAMP

功能: 返回当前的时间戳,返回值类型为timestamp with time zone,返回格式与NLS_TIMESTAMP_TZ_FORMAT一致。

说明

  • 可以使用“SELECT * FROM NLS_SESSION_PARAMETERS;”查看NLS相关参数的当前值。
  • 可以通过“ALTER SESSION SET nls_param = 'nls_param_value' ;”修改NLS相关参数的当前值。

示例

返回当前的时间戳。

SELECT SYSTIMESTAMP FROM SYS_DUMMY; SYSTIMESTAMP ---------------------------------------- 2019-04-23 14:50:35.175553 +08:00 1 rows fetched.

TIMESTAMPADD

语法:

TIMESTAMPADD(unit, interval,datetime)

功能:TIMESTAMPADD函数用于在一个日期时间上加上指定单位的时间间隔。

其中时间单位unit可以取值:MICROSECOND,SECOND,MINUTE,HOUR,DAY,WEEK,MONTH,QUARTER,YEAR,SQL_TSI_DAY,SQL_TSI_FRAC_SECOND,SQL_TSI_HOUR,SQL_TSI_MINUTE,SQL_TSI_MONTH,SQL_TSI_QUARTER,SQL_TSI_SECOND,SQL_TSI_WEEK,SQL_TSI_YEAR。返回值是DATE。

说明

  • 入参interval必须是可以转为NUMBER的表达式。
  • 入参datetime必须符合时间格式,取值范围[0001-01-01 00:00:00,9999-12-31 23:59:59]。
  • 返回值也应在范围 [0001-01-01 00:00:00, 9999-12-31 23:59:59]内。

示例:

返回指定日期增加两周后的时间。

SELECT TIMESTAMPADD(WEEK,2,'2018-10-04'); TIMESTAMPADD(WEEK,2,'2018-10-04') --------------------------------- 2018-10-18 00:00:00.000000 1 rows fetched.

TIMESTAMPDIFF

语法:

TIMESTAMPDIFF(unit,begin,end)

功能:TIMESTAMPDIFF函数返回两个指定日期begin和end之间的时间间隔。时间间隔单位由unit指定,返回值类型是NUMBER。

说明:

  • begin和end的数据类型是DATE或者TIMESTAMP,即日期或时间表达式。取值范围为:[0001-01-01 00:00:00,9999-12-31 23:59:59]。
  • unit参数用于指定时间间隔的单位,取值范围有:YEAR,QUARTER,MONTH,WEEK,DAY,HOUR,MINUTE,SECOND,MICROSECOND,SQL_TSI_DAY,SQL_TSI_FRAC_SECOND,SQL_TSI_HOUR,SQL_TSI_MINUTE,SQL_TSI_MONTH,SQL_TSI_QUARTER,SQL_TSI_SECOND,SQL_TSI_WEEK,SQL_TSI_YEAR。

示例:

返回两个指定日期相差的天数。

SELECT TIMESTAMPDIFF(DAY, '2018-03-20 23:59:00', '2017-03-22 00:00:00'); TIMESTAMPDIFF(DAY, '2018-03-20 23:59:00', '2017-03-22 00:00:00') ---------------------------------------------------------------- -363 1 rows fetched.

TRUNC

语法:

TRUNC(date[,fmt])

功能:按指定的格式截取输入的日期数据。

入参是date待截取的数据,fmt截取格式。返回值是date。

说明:fmt默认是DD,当前支持的fmt有CC/SCC、D/DAY/DY、WW、W、DD/DDD、MM/RM/MON/MONTH、Q、Y/YY/YYY/YYYY、HH/HH12/HH24、MI、SS等。

示例:

返回当年第一天。

SELECT TRUNC(sysdate,'yy') from SYS_DUMMY; TRUNC(SYSDATE,'YY') ---------------------- 2018-01-01 00:00:00 1 rows fetched.

UNIX_TIMESTAMP

语法:

UNIX_TIMESTAMP() UNIX_TIMESTAMP(datetime) UNIX_TIMESTAMP(datetime_string)

功能:GaussDB 100获取Unix时间戳的方法,即当前时间到1970-01-01 00:00:00 UTC所经过的秒数。

该函数的语法格式为:

  • unix_timestamp():不带参数,表示获取当前时间的unix时间戳。
  • unix_timestamp(datetime):datetime时间类型,表示获取该时间的unix时间戳。
  • unix_timestamp(datetime_string):时间类型字符串,表示获取该时间的unix时间戳,该字符串需要满足常用的时间格式,当前默认格式为:YYYY-MM-DD HH:MI:SS.FF,可以通过nls_timestamp_format参数控制(nls_timestamp_format还未完成)。
  • 该函数不支持嵌套调用。

说明:GaussDB 100的unix_timestamp可能返回BIGINT,也可能返回浮点数。

示例:

返回2015年11月13日10时20分19秒的时间戳。

SELECT UNIX_TIMESTAMP('2015-11-13 10:20:19'); UNIX_TIMESTAMP('2015-11-13 10:20:19') ------------------------------------- 1447381219 1 rows fetched.
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论