date函数的在hive和mysql中的区别

引言:在Hive中我们截取日期通常使用substr(datetime,1,10)的方式,但在Mysql中其实还有一种date、month、year等的用法,直接取出日期,类似于substr的功能

一、hive中使用substr和date区别示例

1、用同样的方式对表进行日期分组求count

--使用substr
select
substr(tmtime,1,10) as dt,
count(1)
from data_version.device_z1_analysis_temporary
group by dt;

--使用date
select
date(tmtime) as dt,
count(1)
from data_version.device_z1_analysis_temporary
group by dt;

此时我们会发现结果有很大的区别,使用substr时确实做到了真正的按日期分组,而使用date时并没有真正的按日期分组,难道它压根就没有分组?

2、单独查一下2022-01-07看一下数据量

select
tmtime,
count(1)
from data_version.device_z1_analysis_temporary
where substr(tmtime,1,10) = '2022-01-07'
group by tmtime

这下就一目了然了,也就是说,date函数在Hive里只是展现出了截取日期的效果,实际上它底层依然是整个一串时间戳;换句话说,date函数只是从日期时间字符串中提取日期部分,并不会对日期进行格式转换。

3、刚刚是使用group by得出的结论,我们不妨用where在做一下验证

--where条件使用完整时间戳过滤
select date(tmtime)
from (select '2022-01-07 11:50:00' as tmtime)t
where date(tmtime) = '2022-01-07 11:50:00';

--where条件使用日期过滤
select date(tmtime)
from (select '2022-01-07 11:50:00' as tmtime)t
where date(tmtime) = '2022-01-07'

 结果也是显而易见,证明我们的结论是正确的

 二、Mysql中使用substr和date区别示例

1、用where在mysql中做一下对比

--where条件使用完整时间戳过滤
select date(tmtime)
from (select '2022-01-07 11:50:00' as tmtime)t
where date(tmtime) = '2022-01-07 11:50:00';

--where条件使用日期过滤
select date(tmtime)
from (select '2022-01-07 11:50:00' as tmtime)t
where date(tmtime) = '2022-01-07'

结果正好和Hive相反,这也说明了,mysql里的date真的就是和substr一个功能,不只是展示形式是日期,实际数据也是日期

 2、用substr验证一下,是否和date效果完全一致

select substr(tmtime,1,10)
from (select '2022-01-07 11:50:00' as tmtime)t
where substr(tmtime,1,10) = '2022-01-07';

 

 和date用法结果完全一致

三、总结

1、在Hive中,截取日期尽量用substr,因为date只是展现形式和substr一致,并不是数据本身

2、在mysql中,无所谓使用substr或date,效果完全一致

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值