簡體   English   中英

從日期范圍SQL生成天

[英]Generate days from date range sql

我需要像這樣在sql中生成兩個日期之間的日期:

從日期范圍生成天

我正在使用此查詢:

select a.Date 
from (
    select curdate() - INTERVAL (a.a + (10 * b.a) + (100 * c.a)) DAY as Date
    from (select 0 as a 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) as a
    cross join (select 0 as a 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) as b
    cross join (select 0 as a 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) as c
) a

效果很好,但這總是產生1000天。 我如何生成其他天數,例如365?

您可以添加一個限制條款(和一個命令)

select a.Date 
from (
    select curdate() - INTERVAL (a.a + (10 * b.a) + (100 * c.a)) DAY as Date
    from (select 0 as a 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) as a
    cross join (select 0 as a 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) as b
    cross join (select 0 as a 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) as c
) a 
order by 1 desc 
limit 365

或者,如果允許您以更易讀的方式創建臨時表,並且可以很容易地擴展到10,000個整數或更多:

CREATE TEMPORARY TABLE units(idx) 
ENGINE=MEMORY 
AS (
          SELECT 0
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
);

SELECT a.the_date 
FROM (
SELECT curdate() - INTERVAL (hundreds + tens + units) DAY AS the_date
FROM       (SELECT idx      AS units    FROM units) units
CROSS JOIN (SELECT idx*  10 AS tens     FROM units) tens
CROSS JOIN (SELECT idx* 100 AS hundreds FROM units) hundreds
WHERE hundreds + tens + units < 365
) AS a
ORDER BY 1
;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM