Maxcompute ODPS SQL 日期函数
日期函数
1.DATEADD
--按照指定的单位修改date的值
--加1天
dateadd(datetime, 1, 'dd')
--减1天
dateadd(datetime, -1, 'dd')
--加20个月
--月份溢出,年份增加
dateadd(datetime, 20, 'mm')
--2005年2月没有29日
--日期截取当月最后一天
dateadd(datetime, 1, 'mm')
2.DATE_ADD
--按照幅度增减天数
--加1天
date_add( datetime, 1)
--减1天
date_add( datetime, -1)
--加20天
date_add( datetime, 20)
3.DATEDIFF
--计算两个容日期的差值,并将差值以指定单位展示
datediff(end, start, 'yyyy')
datediff(end, start, 'dd')
datediff(end, start, 'mm')
datediff(end, start, 'hh')
datediff(end, start, 'mi')
datediff(end, start, 'ss')
4.DATEPART
--提取日期中指定单位的值
datepart(datetime, 'yyyy')
datepart(datetime, 'mm')
5.DATETRUNC
--返回日期指定单位的后的日期
datetrunc('2020-08-07 16:28:46', 'yyyy') = 2020-01-01 00:00:00
datetrunc('2020-08-07 16:28:46', 'month') = 2020-08-01 00:00:00
datetrunc('2020-08-07 16:28:46', 'DD') = 2020-08-07 00:00:00
6.GETDATE
--获取当前系统时间(东八区)
select getdate();
7.ISDATE
--判断一个日期能否按照指定的格式转换为一个日期值;
--转换成功为true,转换失败为false;
isdate('2020-08-25 10:27:30','yyyy-mm-dd hh:mi:ss')
8.LASTDAY
--截取所在月的最后一天
lastday('2020-08-25 10:27:30')=2020-08-31 00:00:00
9.TO_DATE
--将字符串转成日期
to_date('Lisa2020-08*03', 'Lisayyyy-mm*dd') = 2020-08-03 00:00:00
to_date('20200818', 'yyyymmdd') = 2020-08-18 00:00:00
to_date('202008182030','yyyymmddhhmi') = 2020-08-18 20:30:00
to_date('2020818', 'yyyymmdd') = null --格式不符合,引发异常。
to_date('丽萨2020-08*3', '丽萨yyyy-mm*dd') = null --格式不符合,引发异常。
to_date('2020-08-01', 'yyyy') = null --格式不符合,引发异常。
to_date('20200830 15-13-12.345','yyyymmdd hh-mi-ss.ff3')=2018-10-30 15:13:12
10.UNIX_TIMESTAMP
--将日期转成unix格式
unix_timestamp(2020-08-25 10:41:30) = 1598323290
11.FROM_UNIXTIME
--将unix格式转成日期值
from_unixtime(1598323290) = 2020-08-25 10:41:30
12.WEEKOFYEAR
--返回日期位于那一年的第几周
WEEKOFYEAR('2020-08-25 10:41:30')=35
13.QUARTER
--返回一个日期的季度
14.EXTRACT
--提取日期中指定的一部分
SET odps.sql.type.system.odps2=true;
SELECT extract(YEAR FROM '=2020-08-01 11:35:00') year
,extract(MONTH FROM '2020-08-01 11:35:00') month
,extract(DAY FROM '2020-08-01 11:35:00') day
,extract(HOUR FROM '2020-08-01 11:35:00') hour
,extract(MINUTE FROM '2020-08-01 11:35:00') minute;
15.MONTHS_BETWEEN
--返回两个日期之间的月份数
SELECT months_between('2020-02-28 10:30:00', '2019-08-30'); = 5.949596774193548
SELECT months_between('2019-08-30','2020-02-28 10:30:00' ); = -5.949596774193548
16.ADD_MONTHS
--返回增加月份后的日期
add_months('2020-02-14',6)
17.NEXT_DAY
--返回大于指定日期的下周几
SELECT next_day('2020-08-25','TU');='2020-09-01'
18.LAST_DAY
--返回所在月份的最后一天日期
SELECT last_day('2020-08-25'); = '2020-08-25'
19.FROM_UTC_TIMESTAMP
--将一个UTC时间的时间戳转换成一个指定时区的时间戳
from_utc_timestamp(1598325107000, 'PST')
from_utc_timestamp('2020-08-25 04:11:47','PST')
from_utc_timestamp('2020-08-25','PST')
20.CURRENT_TIMESTAMP
--返回当前时间的时间戳
21.DAYOFMONTH
--获取日期的天
22.SECOND
--返回秒
23.MINUTE
--返回日期的分钟
24.HOUR
--返回日期的小时
25.DAY
--返回天
26.MONTH
--返回月份
27.YEAR
--返回年份