Karşılaştırma tarih aralıkları
Eğer tarih aralığını bir listesi var Eğer MySQL, (Aralık-başlangıç ve Aralık sonu). örneğin
10/06/1983 to 14/06/1983
15/07/1983 to 16/07/1983
18/07/1983 to 18/07/1983
Ve eğer başka bir tarih aralığı aralıkları HERHANGİ bir listede zaten, bunu nasıl yapacağım? varsa kontrol etmek istiyorum
örneğin
06/06/1983 to 18/06/1983 = IN LIST
10/06/1983 to 11/06/1983 = IN LIST
14/07/1983 to 14/07/1983 = NOT IN LIST
CEVAP
Bu klasik bir sorundur ve eğer bu mantık tersine daha kolay olur.
Sana bir örnek vereyim.
Zaman bir süre burada, ve bir şekilde çakışan süreler dışında farklı varyasyonlar göndeririz.
|-------------------| compare to this one
|---------| contained within
|----------| contained within, equal start
|-----------| contained within, equal end
|-------------------| contained within, equal start end
|------------| not fully contained, overlaps start
|---------------| not fully contained, overlaps end
|-------------------------| overlaps start, bigger
|-----------------------| overlaps end, bigger
|------------------------------| overlaps entire period
öte yandan, bana örtüşmeyen, bütün o post
|-------------------| compare to this one
|---| ends before
|---| starts after
Eğer öyleyse basit bir karşılaştırma azaltmak için:
starts after end
ends before start
o zaman örtüşmeyen, tüm bu bulabilirsiniz, ve sonra uyuşmayan tüm aşamalarını bulabilirsiniz.
Sizin nihai LİSTE örnekte, bu iki kurallara uyuyor.
Aşağıdaki dönemleri veya aralıkları DIŞINDA hava karar vermeniz gerekir:
|-------------|
|-------| equal end with start of comparison period
|-----| equal start with end of comparison period
Eğer tablonuz varsa sütunlar ve range_start, burada range_end denilen tüm eşleşen satırları almak için bazı basit SQL:
SELECT *
FROM periods
WHERE NOT (range_start > @check_period_end
OR range_end < @check_period_start)
NotDEĞİLorada. İki basit kurallar beri tüm bulurbirbiriyle uyumlu olmayansıra basit DEĞİL bunu söylemek ters olur:eğer olmayan eşleşen satırları biri değilse, eşleştirme olanlardan biri olmalı.
Burada basit ters mantık ile bitireceğiz DEĞİL kurtulmak ve almak için başvuru:
SELECT *
FROM periods
WHERE range_start <= @check_period_end
AND range_end >= @check_period_start
MS SQL tarih karşılaştırma?...
An tarih saat karşılaştırma js...
Tarih aralıkları arasında Javascript d...
Karşılaştırma sadece JavaScript zaman ...
Karşılaştırma bir dinozor memcached Re...