ASP‘De Gelişmiş Tarih Arama Sorunu
-
Merhaba. Düşündüm düşündüm işin içinden çıkamadım.
Öncelikle olayı anlatayım: Sistemde belirli başlama ve bitiş tarihleri olan işler var. Yani Her işin ayrı bir başlama ve bitiş tarihi var.
üç farklı şekilde arama yapılabiliyor:
1. Sadece başlangıç tarihi
2. sadece bitiş tarihi
3. başlangıç ve bitiş tarihi
Sorun burda başlıyor. Örneğin 3. farklı iş olsun:
İŞ_BİR: 10.02.2010 - 25.02.2010
İŞ_İKİ: 20.02.2010 - 07.03.2010
İŞ_ÜÇ: 15.02.2010 - 10.03.2010
ben mesela 17.02.2010-08.03.2010 araması yaptığımda bu üç işinde çıkmasını istiyorum.
verdiğim örneği incelerseniz bu üç işinde nasıl çıktığını anlarsınız.
aradığım tarih işin tarihinin arasında ise de çıksın, başlangıcı kaçırmış ama bitişe daha varsa da çıksın, aradığım başlama tarihinde henüz başlamamaış ama aradığım bitiş tarihi işin içinde olduğu için de çıksın.
Bunu sql'de bir türlü yapamadım. aklıma gelmeyen birşeyler var ama ne???
edit: belirteyim; arama formundan iki değer geliyor.(arama_baslangic ve arama_bitis gibi)
işlerin adlarıda is_baslangic ve is_bitis olsun -
Şöle bişi olabilir mi ?
Select * from tablo where baslangic_tarih like'%"&arama&"%' or bitis_tarih like'%"&arama&"%' order by id desc
-
yok olmaz. ayrıca belirteyim arama formundan iki tarih geliyor. başlangıç ve bitiş için. zira başka türlü tarih aralığı arayamam :)
-
select yıldız from tablo where baslangic_tarih >= datevalue('20.10.2010') and bitis_tarih <= datevalue('28.11.2010')
-
wking bunu yazdı:
-----------------------------select yıldız from tablo where baslangic_tarih >= datevalue('20.10.2010') and bitis_tarih <= datue'28.11.2010'
-----------------------------
verdiğin tarihleri ilk mesajda verdiğim gibi düşündüm: select * from tablo where baslangic_tarih >= datevalue('17.02.2010') and bitis_tarih <= datue'08.03.2010'
bunun sonucunda sadece İŞ_İKİ gelmez mi sence? -
Biraz daha detaylandırayım:
ilk posttaki örnek üzerinden gidiyorum:
İŞ_BİR --- > arama_baslangic, is_baslangic'i geçmiş. Fakat is_bitis tarihi arama_baslangic ve arama_bitis arasında olduğu için çıkması gerekli
İŞ_İKİ --- > arama_baslangic, is_baslangic tarihinden önce VE arama_bitis, is_bitis tarihinden sonra. Bunun illaki çıkması gerekiyor
İŞ_ÜÇ --- > arama_baslangic, is_baslangictan sonra(yani iş başlamış bile) FAKAT arama_bitis, is_bitis'ten önce. yani bizim aradığım tarih içerisinde bu iş var.çıkması gerekli.
Bunu sql sorgusu halini soruyorum :) -
NoktaliVirgul bunu yazdı:
-----------------------------
wking bunu yazdı:
-----------------------------
select yıldız from tablo where baslangic_tarih >= datevalue('20.10.2010') and bitis_tarih <= datue'28.11.2010'
-----------------------------
verdiğin tarihleri ilk mesajda verdiğim gibi düşündüm: select * from tablo where baslangic_tarih >= datevalue('17.02.2010') and bitis_tarih <= datue'08.03.2010'
bunun sonucunda sadece İŞ_İKİ gelmez mi sence?
-----------------------------Hocam 348739 kere okudum bi şey ifade etmedi yazdıkların kbkma, ben azcık oyun oyniyim kafa uçmuş.
-
wking bunu yazdı:
-----------------------------NoktaliVirgul bunu yazdı:
-----------------------------
wking bunu yazdı:
-----------------------------
select yıldız from tablo where baslangic_tarih >= datevalue('20.10.2010') and bitis_tarih <= datue'28.11.2010'
-----------------------------
verdiğin tarihleri ilk mesajda verdiğim gibi düşündüm: select * from tablo where baslangic_tarih >= datevalue('17.02.2010') and bitis_tarih <= datue'08.03.2010'
bunun sonucunda sadece İŞ_İKİ gelmez mi sence?
-----------------------------Hocam 348739 kere okudum bi şey ifade etmedi yazdıkların kbkma, ben azcık oyun oyniyi kaf uçmuş.
-----------------------------
sende haklısın anlatamamış olabilirim. teşekkür ederim yinede. -
http://www.sorucevap.com/bilisimteknolojisi/veritabanlari/sqlserver/ornekuygulama.asp?405793
kesinlikle bak sonra dene yapacağına eminim :))
burda bak adamın örneklerine tarihe göre listeletme felan yaptıyor :))
-
select * from tablo where (baslangic_tarih <= datevalue('arama_baslangic') and bitis_tarih >= datevalue('arama_baslangic') and bitis_tarih <= datevalue('arama_bitis')) or (baslangic_tarih>=datevalue('arama_baslangic') and bitis_tarih<=datevalue('arama_bitis')) or (bitis_tarih<=datevalue('arama_baslangic') and bitis_tarih>=datevalue('arama_bitis'))
-
edit: hocam şu soruyu şekille şemayla birşeyle açıkça yazar mısın ?
