函数用法
DATEADD
按照指定的单位和幅度修改日期值
函数命令
datetime dateadd(date|datetime|timestamp <date>, bigint <delta>, string <datepart>)
参数说明
- date
必填。待转换的时间日期,可以是date、datetime、timestamp中任意一种
- delta
必填。修改幅度,BIGINT类型。如果delta大于0,则增,否则减。
- datepart
必填。指定修改的单位,STRING类型常量。非常量、不支持的格式或其他类型会返回报错。
datepart列表说明:
字符 |
说明 |
yyyy |
年 |
mm |
月 |
dd |
天 |
或扩展日期格式
字符 |
说明 |
-month或-mon |
年 |
-day |
月 |
dd |
天 |
-hour |
小时 |
示例代码
select '2020-02-28 00:00:00' 日期时间 ,dateadd(datetime '2020-02-28 00:00:00', 1, 'dd') 增加一天 ,dateadd(datetime '2020-02-28 00:00:00', -1, 'dd') 减少一天 ,dateadd(datetime '2020-02-28 00:00:00', 20, 'mm') 增加二十个月_年份增加 ,dateadd(datetime '2020-02-28 00:00:00', 1, 'mm') 增加一月 ,dateadd(datetime '2020-02-28 00:00:00', -1, 'mm') 减少一月
DATE_ADD
按照给定的时间和调整间隔,调整日期。delta为正数时调增,负值调减, 用法和DATE_SUB相反
函数命令
date date_add(date|timestamp|string <startdate>, bigint <delta>)
参数说明
- startdate
必填。待转换的时间日期,可以是date、datetime、string中任意一种
注意:如果是date类型,需要开启odps2的数据类型开关
set odps.sql.type.system.odps2=true;
- delta
必填。修改幅度,BIGINT类型。如果delta大于0,则减,小于0则增。
示例代码
SELECT '2020-02-28 00:00:00' 日期时间 ,date_add(DATETIME '2020-02-28 00:00:00', 1) 增加一天 ,date_add('2020-02-28 00:00:00', 20) 增加20天 ;
set odps.sql.type.system.odps2=true; SELECT '2020-02-28' 日期 ,date_add(DATE '2020-02-28', -1) 减少一天 ;
DATE_SUB
按照给定的时间和调整间隔,调整日期。delta为正数时调减,负值调增 用法和DATE_ADD相反
函数命令
date date_sub(date|timestamp|string <startdate>, bigint <delta>)
参数说明
- startdate
必填。待转换的时间日期,可以是date、datetime、string中任意一种
注意:如果是date类型,需要开启odps2的数据类型开关
set odps.sql.type.system.odps2=true;
- delta
必填。修改幅度,BIGINT类型。如果delta大于0,则增,小于0则减。
示例代码
SELECT '2020-02-28 00:00:00' 日期时间
,date_sub(DATETIME '2020-02-28 00:00:00', 1) 减少一天
,date_sub('2020-02-28 00:00:00', 20) 减少20天
,date_sub('2020-02-28 00:00:00', -1) 增加一天 ;
set odps.sql.type.system.odps2=true;
SELECT '2020-02-28' 日期 ,date_sub(DATE '2020-02-28', 1) 减少一天 ,date_sub(DATE '2020-02-28', -1) 增加一天 ;
DATEDIFF
求给定2个日期时间(A,B),计算A-B时间差值,并返回差值范围中的部分属性值
函数命令
bigint datediff(date|datetime|timestamp <date1>, date|datetime|timestamp <date2>, string <datepart>)
参数说明
- date1
必填,结束时间,减少
- date2
必填,开始时间,被减数
- datepart
必填,日期时间格式单位
字符 |
说明 |
yyyy |
年 |
mm |
月 |
dd |
天 |
hh |
小时 |
mi |
分钟 |
ss |
秒 |
ff3 |
毫秒 |
示例代码
select datediff('2020-11-30 23:59:59', '2020-12-02 00:00:00', 'dd') 天间隔 ,Datediff('2020-11-30 23:59:59', '2020-12-02 00:00:00', 'mm') 月间隔 ,datediff('2020-11-30 23:59:59', '2020-12-02 00:00:00', 'yyyy') 年间隔 ,datediff('2020-11-30 23:59:59', '2020-12-02 00:00:00', 'hh') 小时间隔 ,datediff('2020-11-30 23:59:59', '2020-12-02 00:00:00', 'mi') 分钟间隔 ,datediff('2020-11-30 23:59:59', '2020-12-02 00:00:00', 'ss') 秒间隔 ,datediff('2020-12-03 23:59:59', '2020-12-02 00:00:00', 'dd') 天间隔1 ,datediff(to_date('2018-06-04 19:33:23.250', 'yyyy-mm-dd hh:mi:ss.ff3'), to_date('2018-06-04 19:33:23.234', 'yyyy-mm-dd hh:mi:ss.ff3') , 'ff3') 毫秒差;
DATEPART
返回时间中符合时间参数的部分的值
函数命令
bigint datepart(date|datetime|timestamp <date>, string <datepart>)
参数说明
- date
待转换的日期
- datepart
时间参数,参考备注
示例代码
select datepart('2020-01-30 23:59:59', 'dd') 天 ,datepart('2020-01-30 23:59:59', 'mm') 月 ,datepart('2020-01-30 23:59:59', 'yyyy') 年 ,datepart('2020-01-30 23:59:59', 'hh') 小时 ,datepart('2020-01-30 23:59:59', 'mi') 分钟 ,datepart('2020-01-30 23:59:59', 'ss') 秒间 ,datepart(to_date('2018-06-04 19:33:23.250', 'yyyy-mm-dd hh:mi:ss.ff3') , 'ff3') 毫秒;
DATETRUNC
返回将日期date按照datepart指定的时间单位进行截取后的日期值
函数命令
datetime datetrunc (date|datetime|timestamp <date>, string <datepart>)
参数说明
- date
待转换的日期
- datepart
时间参数,参考备注
返回值
指定时间部门组成的日期值
示例代码
select datetrunc('2020-01-30 23:59:59', 'dd') 天 ,datetrunc('2020-01-30 23:59:59', 'mm') 月 ,datetrunc('2020-01-30 23:59:59', 'yyyy') 年 ,datetrunc('2020-01-30 23:59:59', 'hh') 小时 ,datetrunc('2020-01-30 23:59:59', 'mi') 分钟 ,datetrunc('2020-01-30 23:59:59', 'ss') 秒间 ,datetrunc(to_date('2018-06-04 19:33:23.250', 'yyyy-mm-dd hh:mi:ss.ff3') , 'ff3') 毫秒; ;
FROM_UNIXTIME
将数字型的UNIX时间日期值unixtime转为日期值。
函数命令
datetime from_unixtime(bigint <unixtime>)
参数说明
- unixtime
UNIXTIME的数字,数字标识的含义是从1970-01-01 08:00:00后间隔了多少秒
示例代码
select from_unixtime(123456789);
GETDATE
获取当前系统时间,maxcompute的标准时区是东八区
函数命令
datetime getdate()
参数说明
示例代码
select getdate();
ISDATE
判断一个日期字符串能否根据指定的格式串转换为一个日期值。如果能转换成功,返回True;否则返回False。
函数命令
boolean isdate(string <date>, string <format>)
参数说明
- date
string类型
- format
类型
示例代码
select isdate('2021-10-13','yyyy-mm-dd'),isdate('202110-13','yyyy-mm-dd');
LASTDAY
取date所在月的最后一天,截取到天,时分秒部分为00:00:00
函数命令
datetime lastday(datetime <date>)
参数说明
- date
时间日期,带转换的
示例代码
select lastday('2021-10-13 14:11:17');
TO_DATE
将date转换成符合format格式的日期值。
函数命令
datetime to_date(string <date>, string <format>)
参数说明
- date
带转换的时间字符串
- fomat
字符串格式
示例代码
select to_date('20211013','yyyymmdd');
TO_CHAR
将日期类型date按照format指定的格式转成字符串。
函数命令
string to_char(datetime <date>, string <format>)
参数说明
- date
带转换的时间日期
- format
转换后字符的输出格式
示例代码
select to_char('2021-10-13 14:11:17','yyyy-mm-dd');
UNIX_TIMESTAMP
时间转化为unix时间戳
函数命令
bigint unix_timestamp(datetime <date>)
参数说明
- date
待转换的时间
示例代码
select unix_timestamp('2021-10-13 14:11:17');
WEEKDAY
返回date是当周第几天,周的定义是周一到周日,返回值从0到6
函数命令
bigint weekday (datetime <date>)
参数说明
- date
待转换的时间
示例代码
select weekday('2021-10-11 14:11:17');
WEEKOFYEAR
返回日期date位于那一年的第几周。周一作为一周的第一天
这一周算上一年还是下一年,取决于这一周的大多数日期(4天以上)在哪一年。算在前一年,就是前一年的最后一周;算在后一年就是后一年的第一周。
函数命令
bigint weekofyear (datetime <date>)
参数说明
- date
待转换的时间
示例代码
--当周第几天,从周一开始,序号0-6
select weekofyear('2020-12-31 14:11:17')
,weekofyear(datetime'2021-01-01 00:00:00');
附录
format
字符 |
说明 |
yyyy |
年,四位 |
mm |
月,两位 |
dd |
天,两位 |
hh |
小时,两位 |
mi |
分钟,两位 |
ss |
秒,两位 |
ff3 |
毫秒,三位精度 |