【数据库笔记】Impala 使用札记

日期处理

碰到了烦人日期需求,有:

  • 分区字段dt(str)
  • 时间戳ts(double) 形如 XXXXXXXXXX.XXXXX

需要将时间戳转换成local_dt 进行计算,解决方式:因为只要日期(date),所以可以先把double的小数点后面砍掉,cast转成int;然后将数字int转成时间格式。

from_unixtime(cast(ts as int),'yyyyMMdd') as log_date

其他的常用函数

获取当前日期

now()

select now()
rst:2019-10-24 10:58:47.128771000

current_timestamp()

select current_timestamp()
rst:2019-10-24 11:29:43.718155000

now()和current_timestamp()等价,都是获取当前系统时间

unix_timestamp()

select unix_timestamp()
rst:1571886216

在这里插入图片描述

日期转换操作

转换成date

SELECT to_date(now());
rst:2019-10-24

SELECT to_date('2019-07-04');
rst:2019-07-04

字符串转成timestamp格式

select cast('1966-07-30' as timestamp);
rst:1966-07-30 00:00:00
select cast('1985-09-25 17:45:30.005' as timestamp);
rst:1985-09-25 17:45:30.005000000
select cast('08:30:00' as timestamp);
rst:08:30:00

日期的加减

  • 当前日期加7天
SELECT days_add(now(),7);
rst:2019-10-31 11:38:50.071445000

  • 当前日期减一个月
SELECT months_add(now(),-1);
rst:2019-09-24 17:19:13.609754000

unixtime转成yyyymmdd格式

SELECT from_unixtime(unix_timestamp(),'yyyyMMdd')
rst:20191024

使用from_unixtime转换时yyyyMMdd中的月份要大写,否则不能正确转换月份

日期转字符串

  • 当前日期加7天并转换成yyyymmdd形式
SELECT from_unixtime(unix_timestamp(days_add(now(),7)),'yyyyMMdd');
rst:20191031

字符串转日期

  • 将字符串日期转成yyyymmdd形式
SELECT from_unixtime(unix_timestamp(days_add(cast('2019-07-20' as TIMESTAMP),7)),'yyyyMMdd');
rst:20190727
* 注意:传入的日期格式需带'-',不然结果会是null,例如:
SELECT from_unixtime(unix_timestamp(days_add(cast('20190720' as TIMESTAMP),7)),'yyyyMMdd');
rst:NULL
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值