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

背景:

存在表ods_sales_orders

36663cdeb113

需求:

提取表中字段create_date的年月

实现:

法一:

利用substr()

select substr(create_date,1,7) as `umonth(当月)`

from ods_sales_orders limit 10;

36663cdeb113

法二:利用dateformat()

注意: date_format() 并没有要求转换前的字段为日期类型,str类型也可以转

select date_format(TO_DATE(`create_date`),'yyyy-MM') as `umonth(当月)`

from ods_sales_orders limit 10;

36663cdeb113

或者

select date_format(`create_date`,'yyyy-MM') as `umonth(当月)`

from ods_sales_orders limit 10;

36663cdeb113

二者结果一致

存在疑问:

目的是提取字段create_date的年月

原数据:

36663cdeb113

操作:

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

select date_format(TO_DATE(`create_date`),'%Y-%m') as `umonth(当月)`

from ods_sales_orders limit 10;

结果:

36663cdeb113

为什么不是显示成'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 ;

36663cdeb113

总结:

hive中将str转为日期用TO_DATE();

mysql中用str_to_date()

hive 与mysql在date_format()中的格式区别

hive里dateformat的格式是只有'yyyy-MM-dd HH',对应与mysql 的'%Y-%m-%d %H'

36663cdeb113

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

36663cdeb113

但是to_date 只能是str

36663cdeb113

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值