none
iki tarih arası sorgulama hakkında. RRS feed

  • Soru

  • selamlar aşağıdaki sorgu ile ilgili problem yaşıyorum, sistem şöyle para transferlerinin listelendiği bir sayfa ve burada o hesaba giren yada çıkan paratransferlerının kayıt dökümü yer alıyor benim istediğim tarih aralığı içerisinde filtreleme yapmak aslında direk okuyunca gayet kolay geliyor kulağa ancak bir durum oluşuyor ve hatalı sonuç dönüyor bazen anlamış kavrayabilmiş değilim, şöyle ki : bir hesapta 2 haziran 23 kasım arası kayıt yok ancak bana 2 aralıgın kayıtlarını getiriyor başka bir hesaptada o tarihler arası kayıt yok ancak o hesapta düzgün çalışıyor.

    Not : 2 hesapta da 2 aralığa ait kayıt mevcut. 

    Yardımlarınızı rica ediyorum...

    SELECT     dbo.transferler.t_id, dbo.kasa_tipleri.kasa_tip_id, dbo.kasa_tipleri.kasa_tip_adi, dbo.kasa_alt_tip.alt_kat_adi, dbo.transferler.giris_ust_kasa, 
                          dbo.transferler.giris_alt_kasa, dbo.transferler.kasa_tutar AS Expr3, dbo.transferler.kasa_not AS Expr2, dbo.transferler.kasa_taksit AS Expr4, 
                          dbo.transferler.islem_tarihi AS Expr5, dbo.transferler.cikis AS Expr1, kasa_tipleri_1.kasa_tip_adi AS Expr6
    FROM         dbo.kasa_tipleri INNER JOIN
                          dbo.transferler ON dbo.kasa_tipleri.kasa_tip_id = dbo.transferler.giris_ust_kasa INNER JOIN
                          dbo.kasa_alt_tip ON dbo.transferler.giris_alt_kasa = dbo.kasa_alt_tip.alt_kat_id INNER JOIN
                          dbo.kasa_tipleri AS kasa_tipleri_1 ON dbo.transferler.cikis = kasa_tipleri_1.kasa_tip_id
    WHERE     (dbo.transferler.cikis = @id) OR
                          (dbo.transferler.giris_ust_kasa = @id) AND islem_tarihi  between CONVERT(datetime,@baslangic,104) and CONVERT(datetime,@bitis,104)


    Cevap geldi

    2 Aralık 2013 Pazartesi 19:01

Yanıtlar

  • Merhaba,

    Where cümlenizde hem OR hem de AND var. AND operatörünün değerlendirmede öncelikli olmasından dolayı bu cümle sizin olmasını beklediğinizi tahmin ettiğim gibi:

    Önce (dbo.transferler.cikis = @id) OR
                          (dbo.transferler.giris_ust_kasa = @id)

    Sonra AND islem_tarihi  between CONVERT(datetime,@baslangic,104) and CONVERT(datetime,@bitis,104)

    şeklinde değerlendirilmiyor.

    Önce AND ile bağlananlar yani (dbo.transferler.giris_ust_kasa = @id) AND islem_tarihi  between CONVERT(datetime,@baslangic,104) and CONVERT(datetime,@bitis,104)

    değerlendirilip sonra (dbo.transferler.cikis = @id)

    OR operatörü ile birleştiriliyor.

    Sorgunuzda OR ile bağlanan ifadeleri

    WHERE     ( (dbo.transferler.cikis = @id) OR
                          (dbo.transferler.giris_ust_kasa = @id) ) AND islem_tarihi  between CONVERT(datetime,@baslangic,104) and CONVERT(datetime,@bitis,104)

    şeklinde ayrı paranteze alıp dener misiniz?

    • Yanıt Olarak Öneren Cihan YakarMVP 3 Aralık 2013 Salı 07:12
    • Yanıt Olarak İşaretleyen Burak ORDU 8 Aralık 2013 Pazar 19:52
    3 Aralık 2013 Salı 06:12