Datetime alanı ile iki tarih arası filtreleme.

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
ikutluay
Üye
Mesajlar: 2341
Kayıt: 03 Tem 2007 10:13

Datetime alanı ile iki tarih arası filtreleme.

Mesaj gönderen ikutluay »

Merhaba ;

Öncelikle forumda arayın demeyin. Hem aradım hemde koddaki mantıksal hatayıda etrafından dolaşarak aştım. ama neden direkt olmasın diye sormadan edemedim.

sck_vade ve sck_creation alanlarım var. ikiside datetime alanı. ama vade elle giriliyor ve öbürünü sistem çakıyor. kısaca birinde sadece tarih varken öbürüne saatte çakılıyor.. (aslında bunuda denemeler sonucu buldum sql çalışmayınca)

başlangıç ve bitiş olarak 18.5.2010 verdik diyelim. ilk vade ve son vade ile iki tarih arası liste alırken kod çalışıyor. ama vadeyi çıkarıp creation alanını koyunca kayıtlar gelmiyor. oysa kayıtlar var. 18.i için ilk tarih 17, bitiş 19 olursa ve sql büyük eşit ve küçük eşit yerine direkt büyük veya küçük olursa çalışıyor (bu şekilde aştım)

ama neden direkt yapamayayım ki bunu ?

Kod: Tümünü seç


SELECT 
sck_create_date as Giris_Tarihi,sck_tip as Tip, sck_borclu as Borclu, sck_vdaire_no as VergiDairesi, 
sck_vade as Vade,sck_tutar as Tutar,sck_doviz as Doviz,sck_odenen as Odenen,sck_borclu_tel as TelNo,
sck_duzen_tarih as Dzn_Tarihi, sck_ilk_evrak_sira_no as Ilkevraksirano,sck_srmmrk as SrMrk, 
dbo.SORUMLULUK_MERKEZLERI.som_isim as Srm_Mrk  
FROM 
ODEME_EMIRLERI WITH ( NOLOCK ) 
LEFT OUTER JOIN dbo.SORUMLULUK_MERKEZLERI ON (dbo.ODEME_EMIRLERI.sck_srmmrk = dbo.SORUMLULUK_MERKEZLERI.som_kod) 
where ((sck_create_date>='20100518' and sck_create_date<='20100518')) and 
          sck_tip in (6) and sck_srmmrk in (1,2,3,4,5,6,7,8,9,10,11,12,13,14) and sck_sonpoz in (2)
yukardaki sql de ayın 18 ine ait kayıtlar gelmiyor. where aleninde create_date çıkıp vade gelince oluyor. üstelik create date varkende tarihleri 17 ve 19 una ayarlsam gene sorunsuz çekiyor. ama ben tarihlere 1 gün ekleyerek yapmak istemiyorum
saygılar
Kişi odur ki, koyar dünyada bir eser. Eseri olmayanın yerinde yeller eser./Muhammed Hadimi
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
ikutluay
Üye
Mesajlar: 2341
Kayıt: 03 Tem 2007 10:13

Re: Datetime alanı ile iki tarih arası filtreleme.

Mesaj gönderen ikutluay »

onca site gezdim şu bu derken. bulduğum en iyi çözümlerden birisi kendi yaptığım oldu.

<= şartı yerine > şartı koyup son son tarihi bir artırmak mükemmel sonuç veriyor.

SQL kullanılan bir çok sitede aynı alanda hem tarih hem zaman kullanmayın diyor.

Kod: Tümünü seç

Code:

dateDiff(day, sck_create_date, '2010-05-18') <= 0 and dateDiff(day, sck_create_date, '2010-05-18') >= 0

when same day:
Code:

dateDiff(day, sck_create_date, '2010-05-18) = 0

Kişi odur ki, koyar dünyada bir eser. Eseri olmayanın yerinde yeller eser./Muhammed Hadimi
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Datetime alanı ile iki tarih arası filtreleme.

Mesaj gönderen mrmarman »

Merhaba.

Sorunun ne olduğunu anladın sanırım. Aslında yapacağın işlem basitti.
Yanıldığın nokta ise tarihleri SQL metni içinden veriyor olmandır. Parametre olarak geçseydin bu sorunla hiç karşılaşmazdın.

Tarih girişinde ve güncellemede EXECSQL kullanırken de, tarih içeren SELECT sorgusu yaparken de gireceğin ve soracağın tarihleri SQL içine parametre ile gönderirsen, parametre atamasını INT(Tarih) INT(Date) gibi girseydin saatler ayağına dolaşmazdı. INT fonksiyonu biliyorsun bir ondalıklı sayının tamsayı kısmını alır. Saat ise tarihin ondalıklı kısmında olduğundan bu şekilde daima saati 0'a eşitleyer sorgularsın girersin. Eğer saat önemli ise de o zaman kaygılandığın sorgu sonucuna da saatli bir parametre ataması yaparak daha net sonuçlar alabilirdin.

Neyse bir musibet bin nasihatten iyidir.

Günü bir arttırıp / azaltıp sorgulama çözümün bu günkü sorguladığın tarihler için çözüm gibi bir görünse de kendini aldatmaktan öte gitmez. Son kullanıcıya yazılımını sunduğunda aynı bir günün ortak olduğu bir sorguyu yaparken çıkan sonucu şimdiden merak ediyorum sen de etmelisin. :bravo:
Resim
Resim ....Resim
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Re: Datetime alanı ile iki tarih arası filtreleme.

Mesaj gönderen conari »

Parametreye bende katılıyorum.
ayrıca between öneririm.
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
ikutluay
Üye
Mesajlar: 2341
Kayıt: 03 Tem 2007 10:13

Re: Datetime alanı ile iki tarih arası filtreleme.

Mesaj gönderen ikutluay »

mrmarman yazdı:Merhaba.

Sorunun ne olduğunu anladın sanırım. Aslında yapacağın işlem basitti.
Yanıldığın nokta ise tarihleri SQL metni içinden veriyor olmandır. Parametre olarak geçseydin bu sorunla hiç karşılaşmazdın.

Tarih girişinde ve güncellemede EXECSQL kullanırken de, tarih içeren SELECT sorgusu yaparken de gireceğin ve soracağın tarihleri SQL içine parametre ile gönderirsen, parametre atamasını INT(Tarih) INT(Date) gibi girseydin saatler ayağına dolaşmazdı. INT fonksiyonu biliyorsun bir ondalıklı sayının tamsayı kısmını alır. Saat ise tarihin ondalıklı kısmında olduğundan bu şekilde daima saati 0'a eşitleyer sorgularsın girersin. Eğer saat önemli ise de o zaman kaygılandığın sorgu sonucuna da saatli bir parametre ataması yaparak daha net sonuçlar alabilirdin.

Neyse bir musibet bin nasihatten iyidir.

Günü bir arttırıp / azaltıp sorgulama çözümün bu günkü sorguladığın tarihler için çözüm gibi bir görünse de kendini aldatmaktan öte gitmez. Son kullanıcıya yazılımını sunduğunda aynı bir günün ortak olduğu bir sorguyu yaparken çıkan sonucu şimdiden merak ediyorum sen de etmelisin. :bravo:
Merhaba

Arman üstad. buraya çıktısı oluşmuş sql i son hali ile yazdım. yoksa where koşulundaki herşey formdan giriliyor zaten. dolayısıyla merak edilecek birşey yok. ama neden bunu zorunda kalmak durumundayım ı merak ediyordum ve önerinde nokta atışı doğrusu. yoksa bu tarih artırma eksiltme olayını ben zaten sql oluşturmadan kod içinde yazıp sql i o değişkene göre oluşturuyorum.

Birde dediğin yöntemle deneyeceğim. ama genede görünen o ki büyük yazılım firmasıda olsa veritabanı tasarımı her zaman greken özeni görmüyor. bu firma baya bilinen bir firma ve iki alan kullansa aslında pek bişi farketmez yani.

Cevap veren tüm arkadaşlara saygılar
Kişi odur ki, koyar dünyada bir eser. Eseri olmayanın yerinde yeller eser./Muhammed Hadimi
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Re: Datetime alanı ile iki tarih arası filtreleme.

Mesaj gönderen aslangeri »

s.a.
ben bu gibi durumlar için sorguya saat bilgisinide gönderiyorum.(tabi parametre olarak.) ilk tarih için saat bilgisi 00:00:00 ikinci tarih için 23:59:59 veriyorum.
şimdiye kadar bir sorun yaşamadım.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Cevapla