As a Data Analyst / Developer there are often times when you need a quick way to calculate specific dates.
Being inspired by a post I was forwarded, I took the opportunity to convert these functions for usage in the snowflake cloud data platform.
The original post came from DataCeptor
There are multiple ways to get some of these values, and some of these, were simply copy pasted with the increments changed to zero.
As with anything there are trade-offs, feel free to rewrite as you wish for simplicity vs consistency in keystrokes.
These statements are tested with Snowflake SQL as of 2020-09-21.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
— HTTPS:–WWW.DATACEPTOR.COM/SQL-TRICKS | |
——————————————————————————————————————————————————————- | |
— SNOWFLAKE | |
——————————————————————————————————————————————————————- | |
SELECT | |
DATEADD('MONTH',-1,DATE_TRUNC('MONTH',GETDATE())) AS PREV_MONTH_FIRST_DAY — FIRST DAY OF PREVIOUS MONTH | |
,DATEADD('DAY', -1, DATE_TRUNC('MONTH',GETDATE())) AS PREV_MONTH_LAST_DAY — LAST DAY OF PREVIOUS MONTH | |
,DATE_TRUNC('MONTH',GETDATE()) AS CURRENT_MONTH_FIRST_DAY — FIRST DAY OF THIS MONTH | |
,DATEADD('DAY', -1 , DATEADD(MONTH, +1,DATE_TRUNC('MONTH',GETDATE()))) AS CURRENT_MONTH_LAST_DAY — LAST DAY OF THIS MONTH | |
,DATEADD('MONTH',+1,DATE_TRUNC('MONTH',GETDATE())) AS NEXT_MONTH_FIRST_DAY — FIRST DAY OF NEXT MONTH | |
,DATEADD('DAY',-1, DATEADD('MONTH',+2,DATE_TRUNC('MONTH',GETDATE()))) AS NEXT_MONTH_LAST_DAY — LAST DAY OF NEXT MONTH | |
— QUARTERS | |
,DATEADD('QUARTER',-1,DATE_TRUNC('QUARTER', GETDATE())) AS PREVIOUS_QUARTER_FIRST_DAY — FIRST DAY OF PREVIOUS QUARTER | |
,DATEADD('DAY', -1, DATE_TRUNC('QUARTER', GETDATE())) AS PREVIOUS_QUARTER_LAST_DAY — LAST DAY OF PREVIOUS QUARTER | |
,DATE_TRUNC('QUARTER', GETDATE()) AS CURRENT_QUARTER_FIRST_DAY — FIRST DAY OF THIS QUARTER | |
,DATEADD('DAY', -1, DATEADD('QUARTER', 1, DATE_TRUNC('QUARTER', GETDATE()))) AS CURRENT_QUARTER_LAST_DAY — LAST DAY OF THIS QUARTER | |
,DATEADD('QUARTER',+1,DATE_TRUNC('QUARTER', GETDATE())) AS NEXT_QUARTER_FIRST_DAY — FIRST DAY OF NEXT QUARTER | |
,DATEADD('DAY',-1,DATEADD('QUARTER',+2,DATE_TRUNC('QUARTER', GETDATE()))) AS NEXT_QUARTER_LAST_DAY — LAST DAY OF NEXT QUARTER | |
,DATE_TRUNC('YEAR',DATEADD(YEAR, -1, GETDATE())) AS PREVIOUS_YEAR_Q1_FIRST_DAY — FIRST DAY OF 1ST QUARTER OF PREVIOUS YEAR | |
,DATEADD('DAY', -1, DATEADD('QUARTER',+1,DATE_TRUNC('YEAR',DATEADD(YEAR, -1, GETDATE())))) AS PREVIOUS_YEAR_Q1_LAST_DAY — LAST DAY OF 1ST QUARTER OF PREVIOUS YEAR | |
,DATEADD('QUARTER',+1,DATE_TRUNC('YEAR',DATEADD(YEAR, -1, GETDATE()))) AS PREVIOUS_YEAR_Q2_FIRST_DAY — FIRST DAY OF 2ND QUARTER OF PREVIOUS YEAR | |
,DATEADD('DAY', -1, DATEADD('QUARTER',+2,DATE_TRUNC('YEAR',DATEADD(YEAR, -1, GETDATE())))) AS PREVIOUS_YEAR_Q2_LAST_DAY– LAST DAY OF 2ND QUARTER OF PREVIOUS YEAR | |
,DATEADD('QUARTER',+2,DATE_TRUNC('YEAR',DATEADD(YEAR, -1, GETDATE()))) AS PREVIOUS_YEAR_Q3_FIRST_DAY — FIRST DAY OF 3RD QUARTER OF PREVIOUS YEAR | |
,DATEADD('DAY', -1, DATEADD('QUARTER',+3,DATE_TRUNC('YEAR',DATEADD(YEAR, -1, GETDATE())))) AS PREVIOUS_YEAR_Q3_LAST_DAY– LAST DAY OF 3RD QUARTER OF PREVIOUS YEAR | |
,DATEADD('QUARTER',+3,DATE_TRUNC('YEAR',DATEADD(YEAR, -1, GETDATE()))) AS PREVIOUS_YEAR_Q4_FIRST_DAY — FIRST DAY OF 4TH QUARTER OF PREVIOUS YEAR | |
,DATEADD('DAY', -1, DATEADD('QUARTER',+4,DATE_TRUNC('YEAR',DATEADD(YEAR, -1, GETDATE())))) AS PREVIOUS_YEAR_Q4_LAST_DAY– LAST DAY OF 4TH QUARTER OF PREVIOUS YEAR | |
,DATE_TRUNC('YEAR',DATEADD(YEAR, 0, GETDATE())) AS CURRENT_YEAR_Q1_FIRST_DAY — FIRST DAY OF 1ST QUARTER OF CURRENT YEAR | |
,DATEADD('DAY', -1, DATEADD('QUARTER',+1,DATE_TRUNC('YEAR',DATEADD(YEAR, 0, GETDATE())))) AS CURRENT_YEAR_Q1_LAST_DAY — LAST DAY OF 1ST QUARTER OF CURRENT YEAR | |
,DATEADD('QUARTER',+1,DATE_TRUNC('YEAR',DATEADD(YEAR, 0, GETDATE()))) AS CURRENT_YEAR_Q2_FIRST_DAY — FIRST DAY OF 2ND QUARTER OF CURRENT YEAR | |
,DATEADD('DAY', -1, DATEADD('QUARTER',+2,DATE_TRUNC('YEAR',DATEADD(YEAR, 0, GETDATE())))) AS CURRENT_YEAR_Q2_LAST_DAY– LAST DAY OF 2ND QUARTER OF CURRENT YEAR | |
,DATEADD('QUARTER',+2,DATE_TRUNC('YEAR',DATEADD(YEAR, 0, GETDATE()))) AS CURRENT_YEAR_Q3_FIRST_DAY — FIRST DAY OF 3RD QUARTER OF CURRENT YEAR | |
,DATEADD('DAY', -1, DATEADD('QUARTER',+3,DATE_TRUNC('YEAR',DATEADD(YEAR, 0, GETDATE())))) AS CURRENT_YEAR_Q3_LAST_DAY– LAST DAY OF 3RD QUARTER OF CURRENT YEAR | |
,DATEADD('QUARTER',+3,DATE_TRUNC('YEAR',DATEADD(YEAR, 0, GETDATE()))) AS CURRENT_YEAR_Q4_FIRST_DAY — FIRST DAY OF 4TH QUARTER OF CURRENT YEAR | |
,DATEADD('DAY', -1, DATEADD('QUARTER',+4,DATE_TRUNC('YEAR',DATEADD(YEAR, 0, GETDATE())))) AS CURRENT_YEAR_Q4_LAST_DAY– LAST DAY OF 4TH QUARTER OF CURRENT YEAR | |
— YEARS | |
,DATE_TRUNC('YEAR',DATEADD(YEAR, -1, GETDATE())) AS PREVIOUS_YEAR_FIRST_DAY — FIRST DAY OF PREVIOUS YEAR | |
,DATEADD(DAY , -1, DATEADD(YEAR, 1, DATE_TRUNC('YEAR',DATEADD(YEAR, -1, GETDATE())))) AS PREVIOUS_YEAR_LAST_DAY — LAST DAY OF PREVIOUS YEAR | |
,DATE_TRUNC('YEAR',DATEADD(YEAR, 0, GETDATE())) AS CURRENT_YEAR_FIRST_DAY — FIRST DAY OF THIS YEAR | |
,DATEADD(DAY , -1, DATEADD(YEAR, 1, DATE_TRUNC('YEAR',DATEADD(YEAR, 0, GETDATE())))) AS CURRENT_YEAR_LAST_DAY — LAST DAY OF THIS YEAR | |
,DATE_TRUNC('YEAR',DATEADD(YEAR, 1, GETDATE())) AS NEXT_YEAR_FIRST_DAY — FIRST DAY OF NEXT YEAR | |
,DATEADD(DAY , -1,DATE_TRUNC('YEAR',DATEADD(YEAR, 2, GETDATE()))) AS NEXT_YEAR_LAST_DAY — LAST DAY OF NEXT YEAR | |
— HALF YEARS | |
, DATEADD(MONTH, 6, DATE_TRUNC('YEAR',DATEADD(YEAR, -1, GETDATE()))) AS PREVIOUS_YEAR_SECOND_HALF_FIRST_DAY — FIRST DAY OF SECOND HALF OF PREVIOUS YEAR | |
, DATEADD(MONTH, 6, DATE_TRUNC('YEAR',DATEADD(YEAR, 0, GETDATE()))) AS CURRENT_YEAR_SECOND_HALF_FIRST_DAY — FIRST DAY OF SECOND HALF OF THIS YEAR | |
, DATEADD(MONTH, 6, DATE_TRUNC('YEAR',DATEADD(YEAR, +1, GETDATE()))) AS NEXT_YEAR_SECOND_HALF_FIRST_DAY — FIRST DAY OF SECOND HALF OF NEXT YEAR | |
— OTHER | |
,GETDATE() AS NOW_DATE_TIME– NOW | |
,CAST(DATEADD(D,-1,GETDATE()) AS DATE) AS YESTERDAY– YESTERDAY | |
,CAST(DATEADD(D,-0,GETDATE()) AS DATE) AS TODAY — TODAY | |
,CAST(DATEADD(D,+1,GETDATE()) AS DATE) AS TOMORROW — TOMORROW | |
,DAY(GETDATE()) AS MONTH_DAY_NUMBER — DAY OF MONTH | |
,DATEADD(DD, -30, CAST(DATEADD(D,-0,GETDATE()) AS DATE)) AS DAYS_AGO_30 — 30 DAYS AGO | |
,DATEADD(DD, -90, CAST(DATEADD(D,-0,GETDATE()) AS DATE)) AS DAYS_AGO_90 — 90 DAYS AGO | |
,DATEADD(MONTH, -1, CAST(DATEADD(D,-0,GETDATE()) AS DATE)) AS MONTHS_AGO_01 — 1 MONTHS AGO SINCE LAST MIDNIGHT | |
,DATEADD(MONTH, -3, CAST(DATEADD(D,-0,GETDATE()) AS DATE)) AS MONTHS_AGO_03 — 3 MONTHS AGO SINCE LAST MIDNIGHT | |
,DATEADD(MONTH, -6, CAST(DATEADD(D,-0,GETDATE()) AS DATE)) AS MONTHS_AGO_06– 6 MONTHS AGO SINCE LAST MIDNIGHT | |
,DATEADD(MONTH, -12, CAST(DATEADD(D,-0,GETDATE()) AS DATE)) AS MONTHS_AGO_12 — 12 MONTHS AGO SINCE LAST MIDNIGHT |
You must be logged in to post a comment.