美文网首页zhaoyqiu的数据分析进阶之路2.0
hive中提取年月(与mysql语法存在差异)

hive中提取年月(与mysql语法存在差异)

作者: 喝奶茶不加奶茶 | 来源:发表于2020-07-29 11:26 被阅读0次

    背景:
    存在表ods_sales_orders


    需求:
    提取表中字段create_date的年月

    实现:

    • 法一:
      利用substr()
    select substr(create_date,1,7) as `umonth(当月)` 
    from ods_sales_orders limit 10;
    
    • 法二:利用dateformat()
      注意: date_format() 并没有要求转换前的字段为日期类型,str类型也可以转
    select date_format(TO_DATE(`create_date`),'yyyy-MM') as `umonth(当月)` 
    from ods_sales_orders limit 10;
    

    或者

    select date_format(`create_date`,'yyyy-MM') as `umonth(当月)` 
    from ods_sales_orders limit 10;
    
    

    二者结果一致

    存在疑问:
    目的是提取字段create_date的年月

    原数据:



    操作:
    因为原字段create_date是字符串类型,所以用TO_DATE()将其转化为日期类型,再利用dateformat()

    select date_format(TO_DATE(`create_date`),'%Y-%m') as `umonth(当月)` 
    from ods_sales_orders limit 10;
    

    结果:


    为什么不是显示成'2019-02'这种形式,哪里有出错吗?但date_format(create_date,'YYYY-mm')显示的月份部分全部为00

    回答:
    hive和mysql的语法并不完全一致,hive里dateformat的格式是只有'yyyy-MM-dd HH',对应与mysql 的'%Y-%m-%d %H'
    修改如下:

    select date_format(create_date,'yyyy-MM')
    from ods_sales_orders limit 10 ;
    

    总结:

    • hive中将str转为日期用TO_DATE();
      mysql中用str_to_date()
    • hive 与mysql在date_format()中的格式区别
      hive里dateformat的格式是只有'yyyy-MM-dd HH',对应与mysql 的'%Y-%m-%d %H'


    • date_format() 并没有要求转换前的字段为日期类型,str类型也可以转,或者其它格式



      但是to_date 只能是str

    附:
    hive日期函数

    相关文章

      网友评论

        本文标题:hive中提取年月(与mysql语法存在差异)

        本文链接:https://www.haomeiwen.com/subject/kqthrktx.html