时间日期函数
年份支持范围[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 DUAL;
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 DUAL;
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 DUAL;
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)
功能:获取当前系统时间。
说明:current_timestamp是系统保留字表示获取当前系统时间戳,而current_timestamp(prec)是函数,prec表示秒后面小数位数的精度,取值范围为0~6,且必须为整数常量。current_timestamp(prec)也可以不带参数,即写为current_timestamp(),这时prec的值默认为6。
示例:
返回当前系统时间,秒后面6位。
SELECT CURRENT_TIMESTAMP() from DUAL;
CURRENT_TIMESTAMP()
--------------------------------
2018-12-05 09:23:18.420288
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)
功能:Gauss100 根据Unix时间戳返回日期datetime。
说明:
FROM_UNIXTIME(unix_timestamp)
入参是BIGINT数,支持数值型字符串。不带格式化字符串,默认返回格式为:YYYY-MM-DD HH:MM:SS,秒SS后面带有6位小数。
FROM_UNIXTIME(unix_timestamp,format)
按照指定格式输出日期,不区分大小写,当前支持的格式如下:
%x4位数年份(周一是每周的天)。
%Y 4位数年份。
%D 每个月的第几天,不支持英文后缀。
%M月份英文名称。
%h小时,24小时制。
%i 分钟。
%s 秒。
示例:
返回时间戳1111885200对应的日期。
SELECT FROM_UNIXTIME(1111885200);
FROM_UNIXTIME(1111885200)
--------------------------------
2005-03-27 09:00:00.000000
1 rows fetched.
MONTHS_BETWEEN
语法:
MONTHS_BETWEEN(date1,date2)
功能:Gauss100 计算两个日期(date1和date2)之间的月份差。
说明:如果date1和date2的day字段相同,或者都是当前月的后一天,返回的值是一个整数。否则返回值包含小数部分,该小数部分等于两个日期的天数差除以31。如果date1大于date2,返回值为正数;如果date1小于date2,返回值为负数。入参:日期时间类型(DATE或者TIMESTAMP)返回值:数值类型(NUMBER)。
示例:
两个日期之间的月份差。
SELECT MONTHS_BETWEEN
(TO_DATE('02-02-1995','MM-DD-YYYY'),
TO_DATE('01-01-1995','MM-DD-YYYY') ) "Months"
FROM DUAL;
Months
----------------------------------------
1.03225806451612903225806451612903225807
1 rows fetched.
SLEEP
语法:
SLEEP(n_second)
功能:设置休眠时间。单位是秒。
说明:入参n_second必须是可以转为NUMBER的表达式,取值范围[1,999999999999]
示例:
设置休眠3秒。
SELECT SLEEP(3) FROM DUAL;
SLEEP(3)
--------
1 rows fetched.
SYSTIMESTAMP
语法:
SYSTIMESTAMP
功能: 返回当前的时间戳,返回格式与NLS_TIMESTAMP_FORMAT一致。
说明:可以使用“SELECT * FROM NLS_SESSION_PARAMETERS;”查看NLS相关参数的当前值;可以通过“ALTER SESSION SET nls_param = nls_param_value”修改NLS相关参数的当前值。
示例:
返回当前的时间戳。
SELECT SYSTIMESTAMP FROM DUAL;
SYSTIMESTAMP
--------------------------------
2019-01-11 10:32:26.132121
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。
说明:fm默认是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 DUAL;
TRUNC(SYSDATE,'YY')
----------------------
2018-01-01 00:00:00
1 rows fetched.
UNIX_TIMESTAMP
语法:
UNIX_TIMESTAMP()
UNIX_TIMESTAMP(datetime)
UNIX_TIMESTAMP(datetime_string)
功能:Gauss100 获取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还未完成)。
该函数不支持嵌套调用。
说明:Gauss100 的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.