SparkSQL|日期函数

1. 计算

  • 2个日期小时差

(unix_timestamp(qingjie_reg_time)-unix_timestamp(real_send_time))/3600

  • 计算开始时间startdate到结束时间enddate相差的天数

datediff(string enddate, string startdate)

  • 从开始时间startdate加上days

date_add(string startdate, int days)

  • 从开始时间startdate减去days

date_sub(string startdate, int days)

  • 返回当前时间下再增加num_months个月的日期

add_months(string start_date, int num_months)

  • 返回这个月的最后一天的日期,忽略时分秒部分(HH:mm:ss)

last_day(string date)

  • 本月1日
写法1: get_date(-day(get_date(-1)))
写法2: concat(substr(get_date(-1), 1, 8),'01')

上月最后一天

get_date(-day(get_date(-1))-1)
  • 上月1日
concat(substr(get_date(-day(get_date(-1))-1), 1, 8),'01')
  • 返回当前时间的下一个星期X所对应的日期

如:next_day(‘2015-01-14’, ‘TU’) = 2015-01-20 以2015-01-14为开始时间,其下一个星期二所对应的日期为2015-01-20

next_day(string start_date, string day_of_week)

  • 返回时间的最开始年份或月份

如trunc(“2016-06-26”,“MM”)=2016-06-01 trunc(“2016-06-26”,“YY”)=2016-01-01

注意所支持的格式为MONTH/MON/MM, YEAR/YYYY/YY trunc(string date, string format)

select concat(substr(‘2018-08-31’, 1, 7), ‘-01’)

  • 返回date1与date2之间相差的月份,

如date1>date2,则返回正,如果date1<date2,则返回负,否则返回0.0

如:months_between(‘1997-02-28 10:30:00’, ‘1996-10-30’) = 3.94959677 1997-02-28 10:30:00与1996-10-30相差3.94959677个月

months_between(date1, date2)

  • 某日期所在的周一和周日日期

select date_sub(‘2017-08-06’,IF(pmod(datediff(‘2017-08-06’, ‘1920-01-01′) – 3, 7)=’0’, 7, pmod(datediff(‘2017-08-06’, ‘1920-01-01’) – 3, 7))-7)

2. 格式

  • 按指定格式返回时间date

如:date_format(“2016-06-22″,”MM-dd”)=06-22

date_format(date/timestamp/string ts, string fmt)

  • 将时间的秒值转换成format格式

(format可为“yyyy-MM-dd hh:mm:ss”,“yyyy-MM-dd hh”,“yyyy-MM-dd hh:mm”等等)

如from_unixtime(1250111000,”yyyy-MM-dd”) 得到2009-03-12

from_unixtime(bigint unixtime[, string format])

  • 将格式为yyyy-MM-dd HH:mm:ss的时间字符串转换成时间戳

如unix_timestamp(‘2009-03-20 11:30:01’) = 1237573801

unix_timestamp(string date)

  • 将指定时间字符串格式字符串转换成Unix时间戳,如果格式不对返回0

如:unix_timestamp(‘2009-03-20’, ‘yyyy-MM-dd’) = 1237532400

unix_timestamp(string date, string pattern)

  • 返回时间字符串的日期部分

to_date(string timestamp)

  • 返回时间字符串的年份部分

year(string date)

  • 返回当前时间属性哪个季度

如quarter(‘2015-04-08’) = 2 quarter(date/timestamp/string)

  • 返回时间字符串的月份部分

month(string date)

  • 返回时间字符串的天

day(string date) dayofmonth(date)

  • 返回时间字符串的小时

hour(string date)

  • 返回时间字符串的分钟

minute(string date)

  • 返回时间字符串的秒

second(string date)

  • 返回时间字符串位于一年中的第几个周内

weekofyear(string date)

  • 如果给定的时间戳并非UTC,则将其转化成指定的时区下时间戳

from_utc_timestamp(timestamp, string timezone)

  • 如果给定的时间戳指定的时区下时间戳,则将其转化成UTC下的时间戳

to_utc_timestamp(timestamp, string timezone)

3. 当前日期

  • 获取本地时区下的时间戳

unix_timestamp()

  • 返回当前时间日期

current_date

  • 返回当前时间戳

current_timestamp

    原文作者:张志豪
    原文地址: https://zhuanlan.zhihu.com/p/43906919
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞