• SQL Calendar Table


    --SQL Server 2000
    -----Calendar Table Geovin Du 涂聚文
    
    declare @start datetime,
    @end datetime
    
    set @start = '2006-01-01'
    set @end = '2006-05-02'
    
    declare @no_of_Days int
    set @no_of_days = datediff(dd,@start,@end) + 1
    set rowcount @no_of_days
    
    select identity(int,0,1) as dy into #temp from sysobjects a, sysobjects b
    
    set rowcount 0
    
    select dateadd(dd,dy,@start) as [days] from #temp
    
    drop table #temp
    --
    ---SQL Server 2005
    ---Calendar Table
    WITH CTE_DatesTable
    AS
    (
      SELECT CAST('20090601' as datetime) AS [date]
      UNION ALL
      SELECT DATEADD(dd, 1, [date])
      FROM CTE_DatesTable
      WHERE DATEADD(dd, 1, [date]) <= '20090630'
    )
    SELECT [date] FROM CTE_DatesTable
    OPTION (MAXRECURSION 0);
    GO
    
    ---創造日曆函數 Geovin Du 涂聚文
    CREATE FUNCTION [dbo].[DateTable]
    (
      @FirstDate datetime,
      @LastDate datetime
    )
    RETURNS @datetable TABLE (
      [date] datetime
    )
    AS
    BEGIN
    
      SELECT @FirstDate = DATEADD(dd, 0, DATEDIFF(dd, 0, @FirstDate));   SELECT @LastDate = DATEADD(dd, 0, DATEDIFF(dd, 0, @LastDate));
      WITH CTE_DatesTable
      AS
      (
        SELECT @FirstDate AS [date]
        UNION ALL
        SELECT DATEADD(dd, 1, [date])
        FROM CTE_DatesTable
        WHERE DATEADD(dd, 1, [date]) <= @LastDate
      )
      INSERT INTO @datetable ([date])
      SELECT [date] FROM CTE_DatesTable
      OPTION (MAXRECURSION 0)
    
      RETURN
    END
    GO
    ---創造日曆函數
    CREATE FUNCTION [dbo].[DatesTable]
    (
      @FirstDate smalldatetime,
      @LastDate smalldatetime
    )
    RETURNS @datetable TABLE (
      [date] smalldatetime
    )
    AS
    BEGIN
    
      WITH CTE_DatesTable
      AS
      (
        SELECT @FirstDate AS [date]
        UNION ALL
        SELECT DATEADD(dd, 1, [date])
        FROM CTE_DatesTable
        WHERE DATEADD(dd, 1, [date]) <= @LastDate
      )
      INSERT INTO @datetable ([date])
      SELECT [date] FROM CTE_DatesTable
      OPTION (MAXRECURSION 0);
    
      RETURN;
    END
    GO
    --測試
    SELECT [date]
    FROM [dbo].[DateTable](GETDATE(), DATEADD(dd,5,GETDATE()))
    GO
    SELECT [date]
    FROM [dbo].[DatesTable](GETDATE(), DATEADD(dd,5,GETDATE()))
    GO
    ---
    create table SQLDatesTable
    (
      id int identity(1,1) not null,
      [date] datetime not null
    )
    --
    insert into SQLDatesTable ([date])
    select [date] from [dbo].[DateTable]('20080101', '20081231')
    -- Or
    declare @i int = 0, @date datetime = '20090101'
    while @i <= 100
    begin
      insert into SQLDatesTable ([date]) values (dateadd(dd,@i,@date))
      set @i = @i + 1
    end
    
    select * from SQLDatesTable
    
    哲学管理(学)人生, 文学艺术生活, 自动(计算机学)物理(学)工作, 生物(学)化学逆境, 历史(学)测绘(学)时间, 经济(学)数学金钱(理财), 心理(学)医学情绪, 诗词美容情感, 美学建筑(学)家园, 解构建构(分析)整合学习, 智商情商(IQ、EQ)运筹(学)成功.---Geovin Du(涂聚文)
  • 相关阅读:
    angular运行报错“Cannot find module 'ng2-translate'.”
    切换分支
    下载angular项目报错[ERROR] ionic-app-scripts has unexpectedly closed (exit code 1).
    通过原生SQL判断数据是否存在
    多图合并一张长图脚本
    科大讯飞--新冠肺炎检测赛道第八分享
    Mysql定时任务
    Mysql导出数据结构 or 数据
    G6Editor 边的参数配置
    百度坐标转腾讯坐标
  • 原文地址:https://www.cnblogs.com/geovindu/p/2144253.html
Copyright © 2020-2023  润新知