Mysql
 sql >> Baza danych >  >> RDS >> Mysql

wygeneruj dni z zakresu dat

To rozwiązanie nie używa pętli, procedur ani tabel tymczasowych . Podzapytanie generuje daty z ostatnich 10 000 dni i może zostać przedłużone tak daleko wstecz lub do przodu, jak tylko chcesz.

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' 

Wyjście:

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

Uwagi dotyczące wydajności

Testowanie go tutaj , wydajność jest zaskakująco dobra:powyższe zapytanie zajmuje 0,0009 s.

Jeśli rozszerzymy podzapytanie do wygenerowania ok. 100 000 liczb (a więc dat o wartości około 274 lat), działa w 0,0458 s.

Nawiasem mówiąc, jest to bardzo przenośna technika, która działa z większością baz danych z niewielkimi zmianami.

Przykład SQL Fiddle zwracający 1000 dni



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Przedstawiamy ClusterControl 1.4.1 — wydanie ProxySQL

  2. MySQL SELECT WHERE datetime pasuje do dnia (a niekoniecznie do godziny)

  3. Wdrażanie serwera Percona w chmurze hybrydowej

  4. Eksportowanie tabeli z Amazon RDS do pliku CSV

  5. Podział ciągu MySQL