presto语法- 时间格式的处理

1、unix 时间转 timestamp
     from_unixtime(unixtime) --> timestamp
     
         以时间戳的形式返回UNIX时间戳unixtime(10位)
         例如:
            unixtime = 1696089626000
            from_unixtime(unixtime* 0.001) --> Sun Oct 01 00:00:26 +0800 2023
        
     from_unixtime(time_unix) --> timestamp with time zone
        将UNIX时间戳unixtime(10位)作为带时区的时间戳返回,使用小时和分钟作为时区偏移量
        例如:
            unixtime = 1696089626000, 
            from_unixtime(unixtime, 8, 0) --> Sun Oct 01 00:00:26 +0800 2023
        
      from_unixtime(unixtime, string)--> timestamp with time zone    
        使用时区字符串返回UNIX时间戳unixtime作为带时区的时间戳
        例如:
            unixtime = 1696089626000
            from_unixtime(unixtime* 0.001,'Asia/Shanghai') --> Sun Oct 01 00:00:26 +0800 2023
            

2、current_date --> date  返回当前日期
    SELECT current_date   》》 Tue Nov 07 00:00:00 +0800 2023
    
3、current_time -> time with time zone  返回当前时间(只有小时分钟秒是对的,年月日不正确)  》》 Thu Jan 01 19:18:40 +0800 1970

4、 current_timestamp -> timestamp with time zone 返回当前时间戳  》》 Tue Nov 07 19:30:45 +0800 2023

5、localtime -> time with time zone  返回当前时间(测试出来和current_time返回值一样,(只有小时分钟秒是对的,年月日不正确))  》》 Thu Jan 01 19:34:20 +0800 1970

6、localtimestamp -> timestamp with time zone 返回当前时间戳(测试出来和current_timestamp返回值一样)  》》 Tue Nov 07 19:30:45 +0800 2023

7、 to_unixtime(timestamp) --> double(10位整数)  以UNIX时间戳的形式返回时间戳
     SELECT to_unixtime(current_timestamp) as "t3"   --》》 1699357347.115
     
8、date_trunc(unit, x)  -- > 把时间x 按unit精度截断, 
  x 可以是 current_date、current_time、current_timestamp、localtime、localtimestamp, 但注意unit 要视x 的取值 进行配置, 比如x 没有月份概念,unit不能用month
    unit 可以是 second、 minute、hour、day、week等
    
9、date_add(unit, value, timestamp)  -->  以unit为单位, 将value 加到 timestamp 
        unit    说明
        millisecond    毫秒数
        second    秒数
        minute    分钟数
        hour    小时数
        day        天数
        week    周数
        month    月数
        quarter    季数
        year    年数
    current_timestamp -->   Fri Nov 09 11:18:09 +0800 2023 
    SELECT date_add('day', 1, current_timestamp) -->  Fri Nov 10 11:18:09 +0800 2023  即向后加1天
    SELECT date_add('week', 1, current_timestamp) --> Thu Nov 16 11:22:27 +0800 2023  即向后加1周
    
     
10、date_diff(unit, timestamp1, timestamp2) --> 以unit为单位, 返回两个时间的间隔
     SELECT  date_diff('second', date_add('minute', 60, localtime),  localtime) -- > 按秒为单位,返回两个时间差,即 3600秒
     
     
11、格式化/反格式化函数

        分类符         说明
        %Y            年份,数字,四位数
        %y            年份,数字,两位数
        %m            月份序号(01 .. 12)
        %M            月份名称(January .. December)
        %d            一个月中的某一天序号(01 .. 31)
        %H            小时(00 .. 23)
        %h            小时(01 .. 12)
        %i            分钟 (00 .. 59)    
        %S            秒(00 .. 59)
        %s            秒(00 .. 59)
        
        格式化
            date_format(timestamp, format) → varchar 
            SELECT  date_format(CURRENT_TIMESTAMP, '%y/%m/%d %h:%i:%s') ---> 2024/01/16 11:41:35
            
        反格式化
            date_parse(string, format) → timestamp    使用格式将字符串解析为时间戳, format 和string的格式一样,但年月日时分秒等每个部分必须以% 开头(
            SELECT date_parse('2024/01/16', '%Y/%m/%d') ---> Tue Jan 16 00:00:00 +0800 2024
    
12、 format_datetime(timestamp, format) → varchar      将时间戳格式化为字符串
    format_datetime(CURRENT_TIMESTAMP, 'yyyy-MM-DD HH:mm:ss') ---> 2024-01-16 13:49:01
    

13、 parse_datetime(string, format) → timestamp with time zone  使用格式将字符串解析为带时区的时间戳,format 和string的格式一样
        parse_datetime('2024-01-16 13:49:01', 'yyyy-MM-DD HH:mm:ss') --- > Tue Jan 16 13:49:01 +0800 2024
 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值