查詢最近24小時、昨天、最近7天、上週、最近30天、上月的數據記錄

--定義給定的一天
DECLARE  @ Date  DATETIME = GETDATE();
  
SELECT  @ Date  AS  '目前時間'
,DATEADD(DD,-1,@ Date AS  '前一天'
,DATEADD(DD,1,@ Date AS  '後一天'
/*月計算*/
,DATEADD( MONTH ,DATEDIFF( MONTH ,0,@ Date ),0)  AS  '月初' --在SQL Server中0 表明1900-01-01,經過月運算,保證日恆久爲1號
,DATEADD(DD,-1,DATEADD( MONTH ,1+DATEDIFF( MONTH ,0,@ Date ),0))  AS  '月末(精確到天)' --找到下月初再扣減1天,建議使用DATEADD而不要直接「-1」
,DATEADD(SS,-1,DATEADD( MONTH ,1+DATEDIFF( MONTH ,0,@ Date ),0))  AS  '月末(精確到datetime的小數位)'
,DATEADD( MONTH ,DATEDIFF( MONTH ,0,@ Date )-1,0)  AS  '上月第一天'
,DATEADD( DAY ,-1,DATEADD( DAY ,1-DATEPART( DAY ,@ Date ),@ Date ))  AS  '上月最後一天'
,DATEADD( MONTH ,DATEDIFF( MONTH ,0,@ Date )+1,0)  AS  '下月第一天'
,DATEADD( DAY ,-1,DATEADD( MONTH ,2,DATEADD( DAY ,1-DATEPART( DAY ,@ Date ),@ Date )))   AS  '下月最後一天'
/*周計算*/
,DATEADD(WEEKDAY,1-DATEPART(WEEKDAY,@ Date ),@ Date AS  '本週第一天(週日)' --注意此處與@@datefirst的值有關
,DATEADD(WEEK,DATEDIFF(WEEK,-1,@ Date ),-1)  AS  '所在星期的星期日' --注意此處與@@datefirst的值有關
,DATEADD( DAY ,2-DATEPART(WEEKDAY,@ Date ),@ Date AS  '所在星期的次日' --注意此處與@@datefirst的值有關,其餘天數類推
,DATEADD(WEEK,-1,DATEADD( DAY ,1-DATEPART(WEEKDAY,@ Date ),@ Date ))  AS  '上個星期第一天(週日)' --注意此處與@@datefirst的值有關
,DATEADD(WEEK,1,DATEADD( DAY ,1-DATEPART(WEEKDAY,@ Date ),@ Date ))  AS  '下個星期第一天(星期日)' --注意此處與@@datefirst的值有關
,DATENAME(WEEKDAY,@ Date AS  '本日是周幾'
,DATEPART(WEEKDAY,@ Date AS  '本日是周幾' --返回值 1-星期日,2-星期一,3-星期二......7-星期六
/*年度計算*/
,DATEADD( YEAR ,DATEDIFF( YEAR ,0,@ Date ),0)  AS  '年初'
,DATEADD( YEAR ,DATEDIFF( YEAR ,-1,@ Date ),-1)  AS  '年底'
,DATEADD( YEAR ,DATEDIFF( YEAR ,-0,@ Date )-1,0)  AS  '去年年初'
,DATEADD( YEAR ,DATEDIFF( YEAR ,-0,@ Date ),-1)  AS  '去年年底'
,DATEADD( YEAR ,1+DATEDIFF( YEAR ,0,@ Date ),0)  AS  '明年年初'
,DATEADD( YEAR ,1+DATEDIFF( YEAR ,-1,@ Date ),-1)  AS  '明年年底'
/*季度計算*/
,DATEADD(QUARTER,DATEDIFF(QUARTER,0,@ Date ),0)  AS  '本季季初'
,DATEADD(QUARTER,1+DATEDIFF(QUARTER,0,@ Date ),-1)  AS  '本季季末'
,DATEADD(QUARTER,DATEDIFF(QUARTER,0,@ Date )-1,0)  AS  '上季季初'
,DATEADD(QUARTER,DATEDIFF(QUARTER,0,@ Date ),-1)  AS  '上季季末'
,DATEADD(QUARTER,1+DATEDIFF(QUARTER,0,@ Date ),0)  AS  '下季季初'
,DATEADD(QUARTER,2+DATEDIFF(QUARTER,0,@ Date ),-1)  AS  '下季季末'
 
相關文章
相關標籤/搜索