SQL使用技巧(4.1)Hive日期时间函数

这篇具有很好参考价值的文章主要介绍了SQL使用技巧(4.1)Hive日期时间函数。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

常用的格式化(format)标识符:

yyyy:四位年份
MM:月份,不足两位补0
dd:日期,不足两位补0
HH:小时,24小时制,不足两位补0
mm:分钟,不足两位补0
ss:秒,不足两位补0

一.常规计算函数说明

本章节每一行代码后都有运算说明和执行结果样例,例如 - - 返回当前系统日期 yyyy-MM-dd, 【2023-04-01】

1.1系统当前日期时间

select current_date() -- 返回当前系统日期  yyyy-MM-dd, 【2023-04-01】
    ,current_date  -- 返回当前系统日期  yyyy-MM-dd,带不带括号是一样的  【2023-04-01】
    ,current_timestamp() -- 返回当前系统时间,格式为yyyy-MM-dd HH:mm:ss 【2023-04-01 16:13:39】
    ,current_timestamp  -- 返回当前系统时间,格式为yyyy-MM-dd HH:mm:ss,带不带括号是一样的 【2023-04-01 16:13:39】
    ,unix_timestamp(current_timestamp)  -- 返回当前系统时间的时间戳 【1680365619】
    ;

原生hive中不支持now()的写法,经过加工的工具(TDW\TDH)可能支持,不绝对。
unix_timestamp()也会返回一个时间戳,但并不是系统当前时间的时间戳。
hive to_char,SQL,Hive,sql,hive

1.2日期时间和时间戳转换

select unix_timestamp(to_date('2023-03-31'))  -- 将日期格式转换为时间戳  【1680220800】
    ,unix_timestamp(date('2023-03-31'))  -- 将日期格式转换为时间戳  【1680220800】
    ,unix_timestamp(current_timestamp())  -- 将日期时间格式转换为时间戳 【1680371206】
    ,from_unixtime(1680370963)   -- 将时间戳转换为日期时间格式 【2023-04-01 17:42:43】
    ,from_unixtime(1680370963,'yyyy/MM/dd HH:mm:ss') -- 将时间戳转换为日期时间格式 【2023/04/01 17:42:43】
    ,from_unixtime(unix_timestamp('2023-04-01 17:42:43'),'yyyyMMdd') -- 将时间戳转换为日期  yyyyMMdd 格式 【20230401】
    ,from_unixtime(unix_timestamp('2023-04-01 17:42:43'),'yyyy-MM') -- 将时间戳转换为日期  yyyy-MM 格式 【2023-04】
    ,from_unixtime(unix_timestamp(current_timestamp()))  -- 将时间戳转换为日期时间格式 【2023-04-01 17:46:46】
    ,from_unixtime(cast(1680380654359/1000 as int)) -- 毫秒级的时间戳要使用/1000的方式 【2023-04-01 20:24:14】
    ,date_format('2023-04-01 20:13:00','yyyyMMdd')  -- 将日期或时间类型的数据转换为指定格式的字符串  【20230401】
    ,date_format(CURRENT_TIMESTAMP() ,'yyyy/MM/dd') -- 将日期或时间类型的数据转换为指定格式的字符串  【2023/04/01】
    ;

hive to_char,SQL,Hive,sql,hive

特殊说明:to_char函数用于将日期或时间类型的数据转换为指定格式的字符串。hive中没有to_char()函数,但如果支持Orcale语法(腾讯TDW、星环TDH),则支持 to_char(date/timestamp, format)
其中,date/timestamp表示待转换的日期或时间类型数据,format表示转换后的字符串格式。
即使不支持orcale,也可以用date_format(date/timestamp,format)from_unixtime(unix_timestamp(date/timestamp), format)来代替实现转换。

SELECT to_char(date('2023-04-01'), 'YYYYMMDD')
	,to_char(date('2023-04-01 20:20:20'), 'YYYY/MM/DD')
	;

1.3日期时间部分提取

select to_date(current_timestamp())  -- 将日期时间格式转换为日期格式 yyyy-MM-dd  【2023-04-01】
    ,date(current_timestamp())  -- 回日期时间中的日期部分,格式为yyyy-MM-dd  【2023-04-01】
    ,year('2023-03-31 20:21:22') -- 返回日期时间中的年份,格式为yyyy 数值  【2023】
    ,month('2023-03-31')        -- 返回日期时间中的月份,格式为MM 数值 【4】
    ,day('2023-03-31')      -- day: 返回日期时间中的日,格式为dd 数值  【1】
    ,hour('2023-03-31 20:21:22')    -- hour: 返回日期时间中的小时,格式为hh 数值  【20】
    ,minute('2023-03-31 20:21:22')  -- minute: 返回日期时间中的分钟,格式为mm 数值  【21】
    ,second('2023-03-31 20:21:22')  -- second: 返回日期时间中的秒数,格式为ss 数值  【22】
    ,month('20230331')      -- 当无法识别日期时,返回 null  【NULL】
    ,hour('2023-03-31')     -- 当输入日期无时间时,返回数值0,默认为00:00:00  【0】
    ,hour('青空')     -- 非日期时间格式,返回 null  【NULL】
    ,weekofyear('2023-01-08') --  返回日期时间在一年中的第几周  【1】'2023-01-08'是周日
    ,weekofyear('2023-01-09') --  返回日期时间在一年中的第几周  【2】'2023-01-09'是周一
    ;

当无法识别内容时,提取函数会返回NULL,而不是报错,这里需要注意,例如hour('青空')
hive to_char,SQL,Hive,sql,hive

1.4日期计算函数

select add_months('2023-04-01',5) --  在日期上增加指定的月数 【2023-09-01】
	,add_months('2023-04-01',-5) --  在日期上增加指定的月数  【2022-11-01】
	,date_add('2023-04-01',5) --  在日期上增加指定的天数  【2023-04-06】
	,date_add('2023-04-01',-5) --  在日期上增加指定的天数  【2023-03-27】
	,date_sub('2023-04-01',5) --  在日期上减去指定的天数  【2023-03-27】
	,datediff('2023-04-01','2023-01-01') -- 计算两个日期之间的天数差  【90】
	,last_day('2023-04-05')  	-- 返回指定日期所在月份的最后一天  【2023-04-30】
	,date_add(last_day('2023-04-05'),1)  	-- 返回指定日期下个月的第一天  【2023-05-01】
    ;

hive to_char,SQL,Hive,sql,hive

二.其他特殊计算记录

2.1计算时间上下5分钟的值

此方法用于计算5分钟访问量、通话量等问题的时间处理。

select 
    from_unixtime(floor(floor(unix_timestamp('2023-04-01 20:13:00', 'yyyy-MM-dd HH:mm:ss')/300)*300),'yyyy-MM-dd HH:mm:ss')  -- 【2023-04-01 20:10:00】
    ,from_unixtime(floor(floor(unix_timestamp('2023-04-01 20:18:00', 'yyyy-MM-dd HH:mm:ss')/300)*300),'yyyy-MM-dd HH:mm:ss')  --【2023-04-01 20:15:00】
    ,from_unixtime(floor(floor(unix_timestamp('2023-04-01 20:21:00', 'yyyy-MM-dd HH:mm:ss')/300)*300),'yyyy-MM-dd HH:mm:ss')   --【2023-04-01 20:20:00】
    ,from_unixtime(ceil(ceil(unix_timestamp('2023-04-01 20:13:00', 'yyyy-MM-dd HH:mm:ss')/300)*300),'yyyy-MM-dd HH:mm:ss')  -- 【2023-04-01 20:15:00】
    ,from_unixtime(ceil(ceil(unix_timestamp('2023-04-01 20:18:00', 'yyyy-MM-dd HH:mm:ss')/300)*300),'yyyy-MM-dd HH:mm:ss')  -- 【2023-04-01 20:20:00】
    ,from_unixtime(ceil(ceil(unix_timestamp('2023-04-01 20:21:00', 'yyyy-MM-dd HH:mm:ss')/300)*300),'yyyy-MM-dd HH:mm:ss')  -- 【2023-04-01 20:25:00】
    ,floor(date_format('2023-04-01 20:13:00','mm')/5)*5  -- 【10】
;

其中floor()ceil()分别实现向下取整和向上取整操作。
hive to_char,SQL,Hive,sql,hive

2.2未完待续


声明:本文所载信息不保证准确性和完整性。文中所述内容和意见仅供参考,不构成实际商业建议,如有雷同纯属巧合。文章来源地址https://www.toymoban.com/news/detail-654724.html

到了这里,关于SQL使用技巧(4.1)Hive日期时间函数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 关于Hive的使用技巧

    前言 Hive是一个基于Hadoop的数据仓库基础架构,它提供了一种类SQL的查询语言,称为HiveQL,用于分析和处理大规模的结构化数据。 Hive的主要特点包括: 可扩展性:Hive可以处理大规模的数据,支持高性能的并行化执行。 数据抽象:Hive将数据抽象为表,可以通过HiveQL进行查询

    2024年02月14日
    浏览(29)
  • Hive-时间日期&trunc-日期与数字截取函数

    一、时间日期函数 1、获取当前时间 2、日期转时间戳 3、时间戳转日期 二、trunc - 日期与数字截取函数 1、日期截取 2、数字截取

    2024年02月11日
    浏览(36)
  • Hive时间日期函数一文详解+代码实例

    目录 前言 一、HiveSQL运行过程 二、Hive时间函数 1.获取当前时间 1.current_date() 2. current_timestamp() 3. unix_timestamp() 2.获取指定时间维度 1. year() 2.quarter() 3.month() 4.day() 5.hour() 6.minute() 7.second 8.weekofyear() 9. dayofweek()  10.last_day()  11.next_day() 12.trunc()  3.时间格式转换  1.to_date() 2. from_un

    2024年02月02日
    浏览(35)
  • 【hive】时间相关函数的使用(时间戳函数unix_timestamp()/from_unixtime()、日期处理函数datediff()/date_sub()/date_add()等)

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 unix_timestamp() 无参数调用,获取当前系统时间戳为10位的bigint类型数值,该数值只精确到秒。 unix_timestamp(string timestamp) 输入格式默认为“yyyy-MM-dd HH:mm:ss”,如不符合则返回null。 unix_timestamp(string date,str

    2024年02月08日
    浏览(29)
  • 1/50 hive sql 日期处理函数

    目录 一、获取当前时间 二、获取指定时间 三、转换时间格式 【1】to_date(string timestamp) 【2】date_format(date string timestamp,string format) 【3】from_unixtime(bigint unixtime,string format) 【4】unix_timestamp(date string timestamp,string pattern)  【5】其余格式的指定转换 regexp_replace()、from_unixtime(unix_ti

    2023年04月25日
    浏览(38)
  • spark SQL 怎么将一个时间戳字符串转换成hive支持的时间日期类型?

    在 Spark SQL 中,可以使用 to_timestamp 函数将一个时间戳字符串转换成 Hive 支持的时间日期类型。这个函数的语法如下: 其中,timestampStr 表示要转换的时间戳字符串,format 表示时间戳字符串的格式,格式必须与时间戳字符串的实际格式相匹配。如果不指定格式,Spark 会使用默认

    2024年02月11日
    浏览(39)
  • MySQL特殊函数使用技巧

    使用group_concat函数,可以轻松的把分组后,name 相同的数据拼接到一起,组成一个字符串,用逗号分隔。 通过该函数就能获取字符长度。 在某个字符串中的位置 将字符串中的字符 A 替换成 B。REPLACE(name,‘A’,‘B’) 获取当前时间 这样就能将 order 表中的部分数据,非常轻松插

    2024年02月04日
    浏览(28)
  • MATLAB Cell函数使用技巧

    MATLAB Cell 函数使用技巧 谈谈MATLAB中cell函数 如果p为一个数,那么h(1)=p,是没有问题的。 如果p为一个向量,那么h(1,:)=p是没有问题的。 如果p是一个矩阵的话,上面的两种赋值方法都是会有错误的。 那么要如何处理呢? 这时就用到了cell数据类型了。cell的每个单元都可以存储任

    2024年02月08日
    浏览(37)
  • SQL中日期与时间类型及函数

    数据类型 含义 对应范围 DATETIME 日期和时间 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 DATE 日期 1000-01-01~ 9999-12-31 YEAR 年 1901~2155(4位时) 1970~2069(70~69)(2位时) TIME 时间 -838:59:59~838:59:59 注意:日期和时间类型的数据需要用“ ”或 ‘ ’括起来; 在MYSQL中日期必须用YYYY-MM-DD格式输入,

    2024年02月02日
    浏览(38)
  • SQL Server ,日期时间函数将时间日期类型的值截取为年月日

    使用 CONVERT 函数将日期时间类型的值转换为字符串类型,同时指定格式为 yyyyMMdd(例如2022年6月30日的日期字符串为\\\'20220630\\\')。 sql复制代码 在上述例子中,我们使用 GETDATE 函数获取当前的日期时间,然后使用 CONVERT 函数将其转换为格式为 yyyyMMdd 的字符串类型。 如果要将日期

    2024年02月16日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包