函数用法

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天 ;

0

set odps.sql.type.system.odps2=true; SELECT '2020-02-28' 日期 ,date_add(DATE '2020-02-28', -1) 减少一天 ;

0

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) 增加一天 ;

0

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) 增加一天 ;

0

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') 毫秒差; 

0

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') 毫秒; 

0

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') 毫秒; ;

0

FROM_UNIXTIME

将数字型的UNIX时间日期值unixtime转为日期值。

函数命令

datetime from_unixtime(bigint <unixtime>)

参数说明

  • unixtime

UNIXTIME的数字,数字标识的含义是从1970-01-01 08:00:00后间隔了多少秒

示例代码

select from_unixtime(123456789);

0

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');

0

LASTDAY

取date所在月的最后一天,截取到天,时分秒部分为00:00:00

函数命令

datetime lastday(datetime <date>)

参数说明

  • date

时间日期,带转换的

示例代码

select lastday('2021-10-13 14:11:17');

0

TO_DATE

将date转换成符合format格式的日期值。

函数命令

datetime to_date(string <date>, string <format>)

参数说明

  • date

带转换的时间字符串

  • fomat

字符串格式

示例代码

select to_date('20211013','yyyymmdd');

0

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');

0

UNIX_TIMESTAMP

时间转化为unix时间戳

函数命令

bigint unix_timestamp(datetime <date>)

参数说明

  • date

待转换的时间

示例代码

select unix_timestamp('2021-10-13 14:11:17');

0

WEEKDAY

返回date是当周第几天,周的定义是周一到周日,返回值从0到6

函数命令

bigint weekday (datetime <date>)

参数说明

  • date

待转换的时间

示例代码

select weekday('2021-10-11 14:11:17');

0

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');

0

附录

format

字符

说明

yyyy

年,四位

mm

月,两位

dd

天,两位

hh

小时,两位

mi

分钟,两位

ss

秒,两位

ff3

毫秒,三位精度

参考资料

日期函数 - MaxCompute - 阿里云

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐