前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >HIVE小案例:计算字符串格式日期相差天数

HIVE小案例:计算字符串格式日期相差天数

作者头像
三猫
发布2020-03-24 10:27:25
4.8K0
发布2020-03-24 10:27:25
举报
文章被收录于专栏:机器学习养成记

戳蓝色字关注我们哟!

如果HIVE表中的日期是以字符串形式进行存储,那如何计算两个日期相差天数呢?

问题陈述

实际应用中,我们经常用字符串的方式进行日期存储,字符串虽然可以进行加减操作,但如果我们想得到两个日期相差几天,这种方式就无法得到我们想要的结果(如:20200301和20200229相差一天,但直接相减得到的是72)。

下方为某商店用户最近一次购买日期?

user_id

last_dt

A00001

20200229

A00002

20200221

A00003

20200105

如果我们要计算每个用户上次购买与当前相差几天,以便对间隔较久的用户进行精准营销,该如何计算呢?

HIVESQL代码

想要解决这个问题,可以通过字符串和时间戳相互转换函数,结合时间差函数实现。先来看下完整语句,然后再具体讲解各函数含义?

代码语言:javascript
复制
datediff(from_unixtime(unix_timestamp('20200131','yyyyMMdd'),'yyyy-MM-dd'),
         from_unixtime(unix_timestamp(last_dt,'yyyyMMdd'),'yyyy-MM-dd'))

—>unix_timestamp('日期字符串',‘pattern’)

这个函数表示将指定格式的日期转换为时间戳。unix_timestamp('20200131','yyyyMMdd') 表示将‘20200131’转换为时间戳,得到结果:1580428800。

—>from_unixtime('时间戳','pattern')

这个函数表示将时间戳转换为指定格式的日期, from_unixtime(1580428800,'yyyy-MM-dd') 则得到结果 '2020-01-31'

—>datediff('data1','data2')

这个函数表示计算两个时间的差, datediff('2020-01-31','2020-02-29') 得到结果:1。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-03-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 机器学习养成记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档