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

背景:
存在表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日期函数

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。