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:006.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:009.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:1210.UNIX_TIMESTAMP
--将日期转成unix格式unix_timestamp(2020-08-25 10:41:30) = 1598323290 11.FROM_UNIXTIME
--将unix格式转成日期值from_unixtime(1598323290) = 2020-08-25 10:41:3012.WEEKOFYEAR
--返回日期位于那一年的第几周WEEKOFYEAR('2020-08-25 10:41:30')=3513.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.94959677419354816.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
--返回年份