hive中提取年月(与mysql语法存在差异)
2020-07-29 本文已影响0人
喝奶茶不加奶茶
背景:
存在表ods_sales_orders
![](https://img.haomeiwen.com/i21398523/e1684693263872d6.png)
需求:
提取表中字段
create_date
的年月
实现:
- 法一:
利用substr()
select substr(create_date,1,7) as `umonth(当月)`
from ods_sales_orders limit 10;
![](https://img.haomeiwen.com/i21398523/c4279f02a0b35432.png)
- 法二:利用dateformat()
注意: date_format() 并没有要求转换前的字段为日期类型,str类型也可以转
select date_format(TO_DATE(`create_date`),'yyyy-MM') as `umonth(当月)`
from ods_sales_orders limit 10;
![](https://img.haomeiwen.com/i21398523/c89ad895d307796f.png)
或者
select date_format(`create_date`,'yyyy-MM') as `umonth(当月)`
from ods_sales_orders limit 10;
![](https://img.haomeiwen.com/i21398523/28e45384be9592a5.png)
二者结果一致
存在疑问:
目的是提取字段create_date的年月
原数据:
![](https://img.haomeiwen.com/i21398523/2ea78f4cf803f17b.png)
操作:
因为原字段create_date是字符串类型,所以用TO_DATE()将其转化为日期类型,再利用dateformat()
select date_format(TO_DATE(`create_date`),'%Y-%m') as `umonth(当月)`
from ods_sales_orders limit 10;
结果:
![](https://img.haomeiwen.com/i21398523/e4b6257a1d014649.png)
为什么不是显示成'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 ;
![](https://img.haomeiwen.com/i21398523/975acf0f67f9b596.png)
总结:
- 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
![](https://img.haomeiwen.com/i21398523/ba8af8162e938c32.png)
附:
hive日期函数