日常需求遇到很多跟日期相关的函数,取年初月初啊日期加减,最近几天之类的,汇总一下,做个记录

 

➡️取年初,用trunc

select trunc(“2024-01-05”,“YY”)

这里的YY也可以写YYYY,如果是月,就写MM

 

➡️取当前日期和时间

-  CURRENT_DATE :返回当前日期。例如 SELECT CURRENT_DATE; 可能返回 2025-01-23 。

🔨一般在可能补数的脚本中,用yesterday分区不如用current_date,

-  CURRENT_TIMESTAMP :返回当前日期和时间。如 SELECT CURRENT_TIMESTAMP; 可能返回 2025-01-23 12:34:56.789 。(这样的遇到的比较少哈哈)

 

➡️日期提取

 -  YEAR :提取日期中的年份。 SELECT YEAR('2025-05-15'); 返回 2025 。

-  MONTH :提取月份。 SELECT MONTH('2025-05-15'); 返回 5 。

-  DAY :提取日。 SELECT DAY('2025-05-15'); 返回 15 。

 🔨日期提取一般用在数据报表需要按照多个维度展示的时候用,但是现在不少报表都可以建分组字段,一个日期可以自动转换成周/星期/月/季度/年的维度

 

➡️日期计算(用于hive引擎,非presto)

-  DATE_ADD :日期加法。 SELECT DATE_ADD('2025-01-23', 5); 表示在 2025-01-23 基础上加上5天,返回 2025-01-28 。

-  DATE_SUB :日期减法。 SELECT DATE_SUB('2025-01-23', 3); 返回 2025-01-20 。

 🔨我发现很多日期相关的计算,都是带-的形式的日期,一般分区表里存的都是不带-的日期

➡️时间计算

- unix_timestamp:select unix_timestamp(a)-unix_timestamp(b)from table

表示计算b与a之间差距多少秒,一般用来做时长计算

 

➡️日期格式化

-  DATE_FORMAT :按指定格式格式化日期。 SELECT DATE_FORMAT('2025-01-23', '%Y年%m月%d日'); 返回 2025年01月23日 。🔨(在我们公司现在的数据平台不需要加%,且M要大写)

 

➡️日期比较

hive引擎:

DATEDIFF :计算两个日期之间的天数差。 SELECT DATEDIFF('2025-02-23', '2025-01-23'); 返回 31 。前面的日期减后面的日期

 

presto引擎:

select date_diff('day',a,b)

其中,a和b是date格式的带-的日期

结果是计算b➖a的值

➡️周相关函数

-  WEEKOFYEAR :返回日期在一年中的周数。 SELECT WEEKOFYEAR('2025-01-23'); 返回当前日期在2025年中的周数。

-  DAYOFWEEK :返回日期是一周中的第几天,1表示星期日,2表示星期一,以此类推。 SELECT DAYOFWEEK('2025-01-23'); 返回 4 ,因为2025年1月23日是星期四。

🔨现在数仓部门也有专门的日期维表,写入了日期相关的很多字段,比如周啊季度啊上旬啊月啊之类的,还挺全面的,但是要看一下跨年是如何计算的,保持一致就好了

➡️时间戳转换

偶尔也会遇到时间戳转换年月日的情况,时间戳是timestamp格式,年月日时分秒这样的,可以用date_formate(时间戳字段,'YYYYMMdd'),表示把时间戳转换为年月日。

🔨因为平时时间格式多数不加-,所以可以直接转换成yyyymmdd,如果需要-的话可以写成YYYY-MM-dd

 

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐