首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

T-SQL 指定月份按周輸出所有日期範例

     編輯:Oracle 資料庫相關知識

需求

給定一個日期,輸出該月份所有日期並按周次分組顯示(每周起始日為週日)。

實作程式碼

DECLARE @i INT;                  -- 計數器
DECLARE @curWk INT;              -- 指定日期所在年份的周數
DECLARE @fstWk INT;              -- 該月 1 號所在年份的周數
DECLARE @fstDay NVARCHAR(10);    -- 該月第一天
DECLARE @lstDay NVARCHAR(10);    -- 該月最後一天
DECLARE @tmpDay SMALLDATETIME;   -- 每周週日的日期
DECLARE @date SMALLDATETIME;     -- 指定日期
DECLARE @tmpDay1 SMALLDATETIME;  -- 每周週六的日期

SET @date = '2007-09-01';

-- 取得該月第一天字串
SELECT @fstDay = CAST(YEAR(@date) AS NVARCHAR(4)) + '-' + 
                 CAST(MONTH(@date) AS NVARCHAR(2)) + '-1';
SET @fstDay = CONVERT(NVARCHAR(10), CAST(@fstDay AS SMALLDATETIME), 120);

-- 取得第一天所在周數
SET @fstWk = DATEPART(wk, @fstDay);

-- 取得該月最後一天
SET @lstDay = CONVERT(NVARCHAR(10), DATEADD(d, -1, DATEADD(m, 1, @fstDay)), 120);

SET @i = 0;
-- 找出屬於上個月同一周的日期(即本月第一周的起始點)
WHILE (@i < 8)
BEGIN
    SET @tmpDay = DATEADD(dd, @i, @fstDay);
    SET @curWk = DATEPART(wk, @tmpDay);
    IF @curWk > @fstWk
    BEGIN
        PRINT @tmpDay;  -- 找到本月第一個週日
        BREAK;
    END
    SET @i = @i + 1;
END
-- 後續邏輯可依此擴展輸出每周日期範圍

關鍵函數說明

  • DATEPART(wk, date):回傳日期所在年份的周數(1-53)。
  • DATEADD(interval, number, date):日期加減運算。
  • CONVERT(style, date):格式轉換,120 = yyyy-mm-dd hh:mi:ss(24h)。

擴展應用

可進一步撰寫函數或預存程序,輸出完整月曆表格,應用於報表排程、排班系統等。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved