presto sqlpresto sql 如何通过 计算当前日期(年月日,时分秒) 来计算当前是星期几?

Posted zgrjddd

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了presto sqlpresto sql 如何通过 计算当前日期(年月日,时分秒) 来计算当前是星期几?相关的知识,希望对你有一定的参考价值。

文章目录

原因

presto没有直接的日期转星期几的方式,但是可以通过函数mod,date_diff多种函数进行求模转换成我们想要的星期几。

 SELECT case mod(
 				date_diff(
 					'day',
 					cast('2021-02-01' as date),
 					cast(
 						cast(stringtime_field_name as timestamp) as date)),
 				7) 
        when 0 then '周一'
        when 1 then '周二'
        when 2 then '周三'
        when 3 then '周四'
        when 4 then '周五'
        when 5 then '周六'
        when 6 then '周日'
        end AS "星期几"
FROM "presto_ods"."thexing_ads_itm_analysis" -- 自己的表名

解析

1.stringtime_field_name 是表里面的字段,将其转换成时间戳。也可以是当前日期函数currentdate(),这样就不用转换变成如下:

 SELECT case mod(
 				date_diff(
 					'day',
 					cast('2021-02-01' as date),
 					cast(
 						cast(CurrentDate() as date)),
 				7) 
        when 0 then '周一'
        when 1 then '周二'
        when 2 then '周三'
        when 3 then '周四'
        when 4 then '周五'
        when 5 then '周六'
        when 6 then '周日'
        end AS "星期几"

FROM  "presto_ods"."thexing_ads_itm_analysis" -- 自己的表名

在通过date_diff,计算date与一个为星期一的日期之间的天数间隔,mod计算间隔除7的余数
通过case把余数转为星期几。

常见的日期处理方式

本文总结一下Presto SQL日期时间比较常用的处理:

1. 特定的日期时间值
select
    current_date, --当前的日期
    
    current_time, --当前的时间
    
    current_timestamp, --当前的时间戳
    
    date'2021-09-01', --给定的日期
    
    time'12:30:00', --给定的时间
    
    timestamp'2021-09-01 12:30:00' --给定的时间戳

需要输入日期时间时,使用前缀date、timestamp、time就会将输入的字符串识别为日期时间。

2. 常用的日期时间处理
select
    current_date, --当前日期
    
    current_date - interval '1' day, --往前推1天
    
    current_date + interval '3' day, --往后推3天
    
    date_add('day', -1, current_date), --往前推1天
    
    date_add('day', 3, current_date), --往后推3天
    
    date_trunc('month', current_date), --当月第1天
    
    date_trunc('month', current_date) - interval '1' month, --前1月第1天
    
    date_trunc('month', current_date) - interval '1' day, --前1月最后1天
    
    date_trunc('week', current_date), --当周第1天
    
    date_diff('day', date'2021-09-01', date'2021-09-23'), --相差天数
    
    to_char(current_date, 'yyyy-mm'), --将日期时间值转换为字符串月份
    
    to_char(current_date, 'yyyymmdd'), --将日期时间值转换为字符串日期
    
    date(date_parse('20210901', '%Y%m%d')), --将日期字符串转换为日期值
    
    date('2021-09-01'), --将日期字符串yyyy-mm-dd转换为日期值
    
    cast('2021-09-01' as date) --将日期字符串yyyy-mm-dd转换为日期值

拓展

mysql有获取自己的当期星期的函数,只需要case when 转换一下值就行

DAYNAME():返回对应周几的英文名
DAYOFWEEK():对应周几的引索(1=周日,2=周一。。。。7=周六)
WEEKDAY():对应周几的引索(0=周一,1=周二。。。。6=周日)

SELECT 
 WEEKDAY(CURRENT_DATE), -- 对应周几的引索(0=周一,1=周二。。。。6=周日)
 DAYOFWEEK(CURRENT_DATE), -- 对应周几的引索(1=周日,2=周一。。。。7=周六)
case mod( 
datediff('2021-02-01',CURRENT_DATE),7)
WHEN 0 THEN '周一' 
WHEN 1 THEN '周二' 
WHEN 2 THEN '周三' 
WHEN 3 THEN '周四' 
WHEN 4 THEN '周五'
WHEN 5 THEN '周六' 
WHEN 6 THEN '周日' 
end '周几'
FROM "hive_eda_ads_itm_okr_analysis"


以上是关于presto sqlpresto sql 如何通过 计算当前日期(年月日,时分秒) 来计算当前是星期几?的主要内容,如果未能解决你的问题,请参考以下文章

通过sql(presto)填充空组的未来日期

Presto SQL - 如何获得数组的所有可能组合?

Presto系列 | 五Tuning Presto SQL Query

Presto系列 | 五Tuning Presto SQL Query

大数据平台建设 —— SQL查询引擎之Presto

如何在 presto SQL 中按月分组