Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

tạo ngày từ phạm vi ngày

Giải pháp này sử dụng không có vòng lặp, thủ tục hoặc bảng tạm thời . Truy vấn con tạo ra các ngày trong 10.000 ngày qua và có thể được mở rộng để lùi xa hoặc chuyển tiếp tùy ý bạn.

select a.Date 
from (
    select curdate() - INTERVAL (a.a + (10 * b.a) + (100 * c.a) + (1000 * d.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
    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 d
) a
where a.Date between '2010-01-20' and '2010-01-24' 

Đầu ra:

Date
----------
2010-01-24
2010-01-23
2010-01-22
2010-01-21
2010-01-20

Ghi chú về hiệu suất

Thử nghiệm nó tại đây , hiệu suất tốt một cách đáng ngạc nhiên: truy vấn trên mất 0,0009 giây.

Nếu chúng ta mở rộng truy vấn con để tạo ra khoảng. 100.000 số (và như vậy có giá trị khoảng 274 năm), nó chạy trong 0,0458 giây.

Ngẫu nhiên, đây là một kỹ thuật rất linh hoạt, hoạt động với hầu hết các cơ sở dữ liệu với những điều chỉnh nhỏ.

Ví dụ SQL Fiddle trả lại 1.000 ngày



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Di chuyển Cơ sở dữ liệu MySQL từ Amazon RDS sang DigitalOcean

  2. Cách tối ưu hóa cơ sở dữ liệu trang web

  3. Ví dụ về LOCALTIME - MySQL

  4. Nhiều câu lệnh chọn trong một truy vấn

  5. MySQL so với MariaDB