SQL 常用日期函数-基于 Impala 3.4.0
接之前 SQL常用日期函数(一)介绍了实现计算上年末、上级末、上月末、上年同期的方法和函数,这次继续分享常用的SQL日期函数及使用场景。包括:DAYOFWEEK 函数、TRUNC 函数、LAST_DAY 函数。
DAYOFWEEK 函数
在impala中,DAYOFWEEK函数返回的是一个1到7的值,其中1通常表示星期日(Sunday),7表示星期六(Saturday)。
例如:
SELECT DAYOFWEEK( CURRENT_DATE() ); --返回结果 7 ( CURRENT_DATE() 为 '2024-11-30' )
在实际工作当中,可以根据具体业务场景使用,如输入一个日期,都能返回周一或周日。
这里,我们约定周一为每个星期的第一天,周日为每个星期的最后一天。
输入一个日期,返回当前星期的第一天:
--示例
SELECT CASE DAYOFWEEK( CURRENT_DATE() )WHEN 2 THEN CURRENT_DATE() /*周一*/WHEN 1 THEN DATE_ADD( CURRENT_DATE(), DAYOFWEEK( CURRENT_DATE() - 7 ) ) /*周日*/ELSE /****/ DATE_ADD( CURRENT_DATE(), 7 - DAYOFWEEK( CURRENT_DATE() ) -5 ) /*周二至周六*/END AS MondayOfCurrentWeek
/*SQL*/;
还有一种方法见下文的 trunc 函数。
输入一个日期,返回当前星期的最后一天(即周日):
示例:
SELECT CASE WHEN DAYOFWEEK ( CURRENT_DATE() ) = 1 THEN CURRENT_DATE()ELSE /******************************/ DATE_ADD( CURRENT_DATE() , 7 - DAYOFWEEK( CURRENT_DATE() ) + 1 )END AS SundayOfCurrentWeek
/*SQL*/;
TRUNC 函数
在Impala中,trunc函数用于截断日期或时间值到指定的单位。
语法:
TRUNC(date/timestamp, unit);
其中date/timestamp 是要截断的日期或时间值,unit是指定的截断单位。
示例:
SELECT CURRENT_DATE() ; --返回结果:2024-11-30SELECT TRUNC(CURRENT_DATE(),'YY'); --返回当年第一天,即 2024-01-01。SELECT TRUNC(CURRENT_DATE(), 'Q'); -- 返回当季第一天,即 2024-10-01SELECT TRUNC(CURRENT_DATE(),'MM'); --返回当月第一天,即 2024-11-01。SELECT TRUNC(CURRENT_DATE(),'DAY'); --返回当前星期的第一天,即 2024-11-25SELECT TRUNC(NOW() ,'DD'); --返回当天零时,即 2024-01-01 00:00:00
LAST_DAY 函数
在Impala中,last_day 函数用于获取指定日期所在月份的最后一天。具体来说,last_day 函数接受一个日期或时间戳参数,并返回该日期所在月份的最后一天的日期值。
示例:
SELECT CURRENT_DATE(); -- 2024-12-12
SELECT LAST_DAY( CURRENT_DATE() ) AS last_day_of_month; -- 2024-12-31
小结
DAYOFWEEK 函数、TRUNC 函数、LAST_DAY 函数等日期函数都是实际开发当中常用的函数,一般会根据实际业务场景结合其他函数灵活使用,适当归纳复盘以便不时之需。