「Hive」与「MySQL」中日期与时间戳转换函数:UNIX_TIMESTAMP() 和FROM_UNIXTIME()的用法与区别

     SQL中日期类型的timestamp时间戳类型为HQL专有类型,而MySQL没有此类时间戳类型,需要用长整型存储。

(一)日期转成时间戳:unix_timestamp(date[, 指定格式]

  • date:date可以是一个date字符串datetime字符串TIMESTAMP或以YYMMDD或YYYYMMDD格式的本地时间的一个数字。

  1. unix_timestamp(): 返回当前时间的时间戳

    函数无参数调用,则返回一个timestamp ('1970-01-01 00:00:00' GMT 之后的秒数) 作为无符号整数,即得到当前时间的时间戳;

  2. unix_timestamp(date): 返回对应时间的时间戳

    如果参数date满足yyyy-MM-dd HH:mm:ss形式,则只需调用date参数,即可得到参数对应的时间戳 ;

  3. unix_timestamp(date, 指定格式):返回指定格式的对应时间的时间戳

    如果参数date不满足yyyy-MM-dd HH:mm:ss形式,则需要指定date的形式,再进行转换。

  • 示例:
1.   select unix_timestamp() 得到当前时间的时间戳

2.   select unix_timestamp('2018-12-05 01:10:00') 得到参数对应时间的时间戳

3.   select unix_timestamp('2009-03-20', 'yyyy-MM-dd') = 1237532400

(二)时间戳转成日期:from_unixtime函数用法

  • 参数timestamp时间戳(bigint类型)。可以用数据库里的存储时间数据的字段。

    • timestamp是10位的时间戳值,即1970-1-1至今的秒数,而13位值的毫秒的是不可以的。

    • 对于13位时间戳,需要先截取,然后转换成bigint类型,因为from_unixtime类第一个参数只接受bigint类型。例如:

select from_unixtime(cast(substr(timestamp,1,10) as bigint),'yyyy-MM-dd HH:mm:ss')
  • 语法:from_unixtime(timestamp,'yyyy-MM-dd HH:mm:ss')(这是默认格式,可以指定格式)

  • 参数format要转化的格式。

  • format可以有的格式(MySQL与HQL不同):

 %M 月名字(January~December)
 %W 星期名字( sunday~saturday)
 %D 有英语前缀的月份的日期(1st,2nd,3rd,等等。)
 %Y 年,数字,4位
 %y 年,数字,2位
 %a 缩写的星期名字(Sun~sat)
 %d 月份中的天数,数字(00~31)
 %e 月份中的天数,数字(0~31)
 %m 月,数字(01~12)
 %c 月,数字(1~12)
 %b 缩写的月份名字(Jan~Dec)
 %j 一年中的天数(001~366)
 %H 小时(00~23)
 %k 小时(0~23)
 %h 小时(01~12)

(三)总结

    上述两个函数可以结合使用,通过from_unixtime(unix_timestamp(string date),'yyyy-MM-dd HH:mm:ss')来规范时间的格式。例如:

select from_unixtime(unix_timestamp(reg_time,'yyyy/mm/dd'),'yyyy-MM-dd')





参考链接:from_unixtime_百度百科和 参考链接 。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值