数据生成时间表

TRUNCATE TABLE DateNorm
go
DECLARE @DateJ INT
DECLARE @CurDate DATETIME
DECLARE @StartDate DATETIME
DECLARE @EndDate DATETIME
SET @StartDate = '2004-1-1'
 ---------这里填写起始时间
SET @EndDate = '2025-1-1'
 ---------这里填写结束时间
 --SELECT DATEDIFF(day, @StartDate, @EndDate) into @DateJ
   
SET @CurDate = @StartDate
WHILE @CurDate < @EndDate
    BEGIN
        INSERT  INTO DateNorm
                ( TheDate ,
                  TheDay ,
                  Quarter ,
                  TendayOfMonth ,
                  HalfYear ,
                  WeekNorm
                )
        VALUES  ( @CurDate ,
                  CASE WHEN DATEPART(weekday, @CurDate) = 1 THEN '星期日'
                       WHEN DATEPART(weekday, @CurDate) = 2 THEN '星期一'
                       WHEN DATEPART(weekday, @CurDate) = 3 THEN '星期二'
                       WHEN DATEPART(weekday, @CurDate) = 4 THEN '星期三'
                       WHEN DATEPART(weekday, @CurDate) = 5 THEN '星期四'
                       WHEN DATEPART(weekday, @CurDate) = 6 THEN '星期五'
                       WHEN DATEPART(weekday, @CurDate) = 7 THEN '星期六'
                  END ,
                  DATENAME(quarter, @CurDate) ,
                  CASE WHEN DATEPART(day, @CurDate) <= 10 THEN '上旬'
                       WHEN DATEPART(day, @CurDate) <= 20
                            AND DATEPART(day, @CurDate) > 10 THEN '中旬'
                       WHEN DATEPART(day, @CurDate) > 20 THEN '下旬'
                  END ,
                  CASE WHEN DATEPART(month, @CurDate) <= 6 THEN '上半年'
                       WHEN DATEPART(month, @CurDate) > 6 THEN '下半年'
                  END ,
                  NULL
                )
        SET @CurDate = DATEADD(day, 1, @CurDate)
    END
     
  /*
        周初始化
  */
 
DECLARE @FirstDay DATETIME
DECLARE @TheDayTh INT
DECLARE @addDays INT
DECLARE @beginDate DATETIME
DECLARE @FinishDate DATETIME
DECLARE @TheDay NVARCHAR(15)
DECLARE @TheDate DATETIME
 
DECLARE C CURSOR
FOR
    SELECT  TheDate ,
            TheDay
    FROM    DateNorm
OPEN C
FETCH NEXT FROM C INTO @TheDate, @TheDay
WHILE @@fetch_status = 0
    BEGIN
        SET @FirstDay = DATEADD(mm, DATEDIFF(mm, 0, @TheDate), 0)
        IF ( @TheDate = @FirstDay )
            BEGIN
                SET @TheDayTh = 1
                IF ( @TheDay = '星期日' )
                    SET @addDays = 0
                ELSE
                    IF ( @TheDay = '星期六' )
                        SET @addDays = 1
                    ELSE
                        IF ( @TheDay = '星期五' )
                            SET @addDays = 2
                        ELSE
                            IF ( @TheDay = '星期四' )
                                SET @addDays = 3
                            ELSE
                                IF ( @TheDay = '星期三' )
                                    SET @addDays = 4
                                ELSE
                                    IF ( @TheDay = '星期二' )
                                        SET @addDays = 5
                                    ELSE
                                        IF ( @TheDay = '星期一' )
                                            SET @addDays = 6
              
                SET @beginDate = @TheDate
                SET @FinishDate = DATEADD(dd, @addDays, @beginDate)
                                               
                UPDATE  DateNorm
                SET     WeekNorm = @TheDayTh
                WHERE   TheDate BETWEEN @beginDate AND @FinishDate
            END
        ELSE
            BEGIN
                IF ( @TheDate > @FinishDate )
                    BEGIN
                        SET @TheDayTh = @TheDayTh + 1
                        IF ( @TheDay = '星期日' )
                            SET @addDays = 0
                        ELSE
                            IF ( @TheDay = '星期六' )
                                SET @addDays = 1
                            ELSE
                                IF ( @TheDay = '星期五' )
                                    SET @addDays = 2
                                ELSE
                                    IF ( @TheDay = '星期四' )
                                        SET @addDays = 3
                                    ELSE
                                        IF ( @TheDay = '星期三' )
                                            SET @addDays = 4
                                        ELSE
                                            IF ( @TheDay = '星期二' )
                                                SET @addDays = 5
                                            ELSE
                                                IF ( @TheDay = '星期一' )
                                                    SET @addDays = 6
                 
                        SET @beginDate = @TheDate
                        SET @FinishDate = DATEADD(dd, @addDays, @beginDate)
                             
                        UPDATE  DateNorm
                        SET     WeekNorm = @TheDayTh
                        WHERE   TheDate BETWEEN @beginDate AND @FinishDate
                    END
            END
             
        FETCH NEXT FROM C INTO @TheDate, @TheDay
    END
CLOSE C
DEALLOCATE

  

posted on   都是脚本惹的祸  阅读(244)  评论(0编辑  收藏  举报

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示