反馈已提交

网络繁忙

SparkSQL日期函数

  • 文档创建者:Roxy
  • 历史版本:12
  • 最近更新:Roxy 于 2024-02-22
  • 1. 概述

    本文介绍 SparkSQL 中的日期函数语法。

    本文同时提供新增计算列公式写法和 SparkSQL 语法写法,用户可自行选择。

    2. 时间戳

    推荐使用FineDataLink 新增计算列中的 DATETONUMBER-日期转化为13位时间戳

    也可以使用 SparkSQL 语法写法:

    语法示例
    unix_timestamp():获取本地时区下的时间戳select unix_timestamp() 
    from_unixtime(bigint unixtime[, string format]):将时间的秒值转换 成 format 格式 ,如 from_unixtime(1250111000,"yyyy-MM-dd") 得到 2009-03-12select from_unixtime(1557737000,"yyyy-MM-dd hh:mm:ss")
    unix_timestamp(string date):将格式为 yyyy-MM-dd HH:mm:ss 的时间字符串转换成时间戳, 如 unix_timestamp('2009-03-20 11:30:01') = 1237573801。select unix_timestamp('2019-05-13 04:43:20')
    unix_timestamp(string date, string pattern):将指定时间字符串格式字符串转换成 Unix 时间 戳,如果格式不对返回 0,如:unix_timestamp('2009-03-20', 'yyyy-MM-dd') = 1237532400select unix_timestamp('2019/05/13 04:43:20',"yyyy/MM/dd hh:mm:ss"

    3. 时间字符串

    说明SparkSQL 语法新增计算列中公式写法推荐使用方式
    返回日期时间字符串的年月日部分

    to_date(string timestamp)


    示例:to_date("1970-01- 01 00:00:00") = 1970-01-01

    新增计算列中写法如下:

    TODATE(LEFT(2023-06-13 00:01:27))   时间字段需要为文本类型格式。

    TODATE(FORMAT(cdate,"yyyy-MM-dd"))  时间字段需要为日期或者时间类型格式。

    返回值:2023-06-13 00:00:00


    推荐使用 FineDataLink 新增计算列中的函数TODATELEFT-截取前几个字符串FORMAT-格式转换
    返回日期时间字符串的年份部分

    year(string date)


    示例:year("1970-01-01") = 1970

    YEAR("2000/1/1")

    推荐使用 FineDataLink 新增计算列中的 YEAR-返回年份
    返回当前日期时间属于哪个季度

    quarter(date/timestamp/string)


    示例:quarter('2015-04-0 8') =2

    暂不支持
    返回日期中的月

    month(string date)


    示例:month("1970-11-0 1") = 1

    MONTH("2000/1/1")推荐使用 FineDataLink 新增计算列中的MONTH-日期中的月份
    返回日期中的日

    day(string date)


    示例: day("1970-11-01") = 1

    DAY("2000/1/1")推荐使用 FineDataLink 新增计算列中的DAY-日期中的日
    返回某一指定时间的小时数

    hour(string date)


    示例: hour('2009-07-30 12:58:59') = 12

    HOUR("11:32:40")推荐使用 FineDataLink 新增计算列中的 HOUR-小时数
    返回某一指定时间的分钟数

    minute(string date)


    示例:minute('2009-07-30 12:58:59') = 58

    MINUTE("15:36:25")推荐使用 FineDataLink 新增计算列中的 MINUTE-分钟数
    返回某一指定时间的秒数

     second(string date)


    示例:second('2009-07-30 12:58:59') = 59

    SECOND("15:36:25")推荐使用 FineDataLink 新增计算列中的 SECOND-秒数
    返回一个代表一年中的第几周的数字

    weekofyear(string date)


    示例:weekofyear("1970- 11-01") = 44

    WEEK("2010/1/1")推荐使用 FineDataLink 新增计算列中的 WEEK-求周数
    返回两个指定日期间的天数、月数或年数

    datediff(string enddate ,string startdate)


    示例:datediff('2009-03-0 1', '2009-02-27') = 2

    DATEDIF("2001/2/28","2004/3/20","Y")推荐使用 FineDataLink 新增计算列中的 DATEDIF-日期差
    返回指定日期后,指定年/月/日/时/分/秒后的日期

    从开始时间 startdate 加上 days :date_add(string startdate, int days)

    从开始时间 startdate 减去 days:date_sub(string startdate, int days)

    ADDTODATE("2023-01-01", "y", 1)=2024-01-01推荐使用 FineDataLink 新增计算列中的ADDTODATE-指定日期后指定DELTA时间的日期


    3.  获取当前时间

    说明SparkSQL 语法新增计算列中公式写法推荐使用方式
    返回当前时间戳

     current_timestamp


    示例:select current_timestamp

    NOW()推荐使用 FineDataLink 新增计算列中的NOW-当前时间
    返回当前时间日期

    current_date


    示例:select current_date

    TODATE(FORMAT(NOW(),"yyyy-MM-dd"))  

    推荐使用 FineDataLink 新增计算列中的TODATE(FORMAT(NOW(),"yyyy-MM-dd"))  

    4. 增加月数

    add_months(string start_date, int num_months):返回当前时间下再增加 num_months 个月的 日期。 

    示例:select add_months('2019-05-13',120)

    推荐使用 FineDataLink 新增计算列中的公式 date(year(today()),MONTH(today())+num_months,day(today())),详情参见:常见日期公式

    5. 获取月末日期

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

    示例:select last_day('2019-02-01')

    推荐使用 FineDataLink 新增计算列中的公式 DATE(YEAR(日期),MONTH(日期)+1,1-1),详情参见:常见日期公式

    6. 获取开始年或月

    使用 SparkSQL 函数 trunc(string date, string format):返回时间的最开始年份或月份。 

    示例:select trunc("2016-06-26","MM"),trunc("2016-06-26","YY")

    则可以看到日期 2016-06-26 的年初和月初时间,如下图所示:

    当然也可以使用 FineDataLink 新增计算列中的公式DATE(YEAR(NOW()),01,01)、DATE(YEAR(NOW()),MONTH(NOW()),01)

    更多示例详情参见:常见日期公式

    7. 日期月份差

    months_between(date1, date2):返回 date1 与 date2 之间相差的月份,如 date1>date2,则返回正,如果 date1<date2,则返回负,否则返回 0.0。

    示例:select months_between("2019-04-01", "2019-06-01")

    推荐使用 FineDataLink 新增计算列中的公式DATEDIF-日期差

    8. 获取指定格式日期

    date_format(date/timestamp/string ts, string fmt):按指定格式返回时间 date。 

    示例:select date_format('2019-05-13','MM/dd') 

    推荐使用 FineDataLink 新增计算列中的公式FORMAT-格式转换,返回指定格式的文本时间数据。

    9. 下周几日期

    next_day(string start_date, string day_of_week):返回当前时间的星期几所对应的日期。

    示例:select next_day('2019-05-13', 'TU')  即返回 2019-05-13 日以后星期二第一次出现的日期。 如下图所示:

    附件列表


    主题: 数据开发
    已经是第一篇
    已经是最后一篇
    • 有帮助
    • 没帮助
    • 只是浏览
    • 评价文档,奖励 1 ~ 100 随机 F 豆!

    鼠标选中内容,快速反馈问题

    鼠标选中存在疑惑的内容,即可快速反馈问题,我们将会跟进处理。

    不再提示

    10s后关闭

    联系我们
    在线支持
    获取专业技术支持,快速帮助您解决问题
    工作日9:00-12:00,13:30-17:30在线
    页面反馈
    针对当前网页的建议、问题反馈
    售前咨询
    采购需求/获取报价/预约演示
    或拨打: 400-811-8890 转1
    qr
    热线电话
    咨询/故障救援热线:400-811-8890转2
    总裁办24H投诉:17312781526
    提交页面反馈
    仅适用于当前网页的意见收集,帆软产品问题请在 问答板块提问前往服务平台 获取技术支持