28 Ocak 2010, PERŞEMBE
tarih, gün aralığı oluşturmak
Gibi bir sorgu çalıştırmak istiyorum
select ... as days where `date` is between '2010-01-20' and '2010-01-24'
Ve verileri gibi:
days ---------- 2010-01-20 2010-01-21 2010-01-22 2010-01-23 2010-01-24
CEVAP
28 Ocak 2010, PERŞEMBE
Bu çözüm kullanırhiçbir döngüler, prosedürler, ya da geçici tablolar. Alt sorgu, son bin gün için bir tarih oluşturur, ve istediğiniz gibi geri veya ileri olarak gitmek için genişletilebilir.
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
where a.Date between '2010-01-20' and '2010-01-24'
Çıkış:
Date
----------
2010-01-24
2010-01-23
2010-01-22
2010-01-21
2010-01-20
Performans ile ilgili notlar
here performansı şaşırtıcı derecede iyi olduğu ortaya test:yukarıdaki sorgu 0.0009 sn sürer.
Alt sorgu oluşturmak için yaklaşık uzatıyoruz. 100,000 numaraları (ve böylece tarih hakkında 274 yıl değer), 0.0458 saniye içinde çalışır.
Bu arada, bu küçük ayarlamalar ile en veritabanları ile çalışan çok taşınabilir bir tekniktir.
Bunu Paylaş:
Nasıl bir dize temsilini kullanmadan a...
İki tarih arasındaki tüm tarihleri bir...
Python tarih aralığı ile yineleme...
Python tarih aralığı oluşturma...
Diğer iki tarih arasında rasgele bir t...