Generate a range of dates using SQL

前端 未结 15 1332
面向向阳花
面向向阳花 2020-11-28 05:47

I have a SQL query that takes a date parameter (if I were to throw it into a function) and I need to run it on every day of the last year.

How to generate a list of

15条回答
  •  自闭症患者
    2020-11-28 06:01

    This query generates a list of dates 4000 days in the future and 5000 in the past as of today (inspired on http://blogs.x2line.com/al/articles/207.aspx):

    SELECT * FROM (SELECT
        (CONVERT(SMALLDATETIME, CONVERT(CHAR,GETDATE() ,103)) + 4000 -
                    n4.num * 1000 -
                    n3.num * 100 -
                    n2.num * 10 -
                    n1.num) AS Date, 
        year(CONVERT(SMALLDATETIME, CONVERT(CHAR,GETDATE() ,103)) + 4000 -
                    n4.num * 1000 -
                    n3.num * 100 -
                    n2.num * 10 -
                    n1.num) as Year,
        month(CONVERT(SMALLDATETIME, CONVERT(CHAR,GETDATE() ,103)) + 4000 -
                    n4.num * 1000 -
                    n3.num * 100 -
                    n2.num * 10 -
                    n1.num) as Month,
        day(CONVERT(SMALLDATETIME, CONVERT(CHAR,GETDATE() ,103)) + 4000 -
                    n4.num * 1000 -
                    n3.num * 100 -
                    n2.num * 10 -
                    n1.num) as Day
               FROM (SELECT 0 AS num union ALL
                     SELECT 1 UNION ALL
                     SELECT 2 UNION ALL
                     SELECT 3 UNION ALL
                     SELECT 4 UNION ALL
                     SELECT 5 UNION ALL
                     SELECT 6 UNION ALL
                     SELECT 7 UNION ALL
                     SELECT 8 UNION ALL
                     SELECT 9) n1
                   ,(SELECT 0 AS num UNION ALL
                     SELECT 1 UNION ALL
                     SELECT 2 UNION ALL
                     SELECT 3 UNION ALL
                     SELECT 4 UNION ALL
                     SELECT 5 UNION ALL
                     SELECT 6 UNION ALL
                     SELECT 7 UNION ALL
                     SELECT 8 UNION ALL
                     SELECT 9) n2
                   ,(SELECT 0 AS num union ALL
                     SELECT 1 UNION ALL
                     SELECT 2 UNION ALL
                     SELECT 3 UNION ALL
                     SELECT 4 UNION ALL
                     SELECT 5 UNION ALL
                     SELECT 6 UNION ALL
                     SELECT 7 UNION ALL
                     SELECT 8 UNION ALL
                     SELECT 9) n3  
                   ,(SELECT 0 AS num UNION ALL
                     SELECT 1 UNION ALL
                     SELECT 2 UNION ALL
                     SELECT 3 UNION ALL
                     SELECT 4 UNION ALL
                     SELECT 5 UNION ALL
                     SELECT 6 UNION ALL
                     SELECT 7 UNION ALL
                     SELECT 8) n4
            ) GenCalendar  ORDER BY 1
    

提交回复
热议问题