Duyuruyu Kapat
Facebook Gözat
Twitter Gözat

Mssql Where koşulunda Isnumeric kullanımı

Konu, 'Veritabanları' kısmında selman tarafından paylaşıldı.

  1. selman

    selman Yeni Üye

    Kayıt:
    18 Şubat 2009
    Mesajlar:
    16
    Beğenilen Mesajlar:
    0
    arkadaşlar merhaba;

    deger, altLimit, ustLimit alanları olan bir tablom var. deger alanında, o kaydın değerini tutuyorum. eğer deger verisi sayısal bir veri ise, altLimit ve ustLimit alanlarında da, deger alanının alabileceği limit bilgilerini saklıyorum.
    eğer deger alanında saklanan veri sayısalsa ve alt/üst limitlerin dışında ise kuralı bozuyor. ben bu kuralı bozan kayıtları listelemek istiyorum.
    programlama dillerinde bir if içerisinde And operatörü ile bağlanmış iki şart varsa ve birinci şart doğru değilse ikinci şarta bakılmadan geçilir; çünkü ikinci şart doğru olsa bile birinci şart bozuyor.
    Yapmak istediğim deger alanında sayısal bir değer varsa ve bu deger alt/üst limit kuralını bozuyorsa seçeceğim.
    Where Isnumeric(deger) = 1 And (deger > ustLimit Or deger < altLimit) -- deger alanı sayısal olanlar ve deger alanı aralık dışındakiler.
    bu şartta varchar to int çevrim hatası alıyorum. deger alanındaki sayısal olmayan kayıtlardan dolayı.

    nasıl yapmam gerekli ki sadece deger alanında sayısal veri varsa ikinci şart çalışsın?

    iyi çalışmalar, Selman.
     
  2. selman

    selman Yeni Üye

    Kayıt:
    18 Şubat 2009
    Mesajlar:
    16
    Beğenilen Mesajlar:
    0
    sorunu şimdilik
    şeklinde, şartlı seçim yaparak çözdüm. ama tabi kod taşınabilirlikten çıktı, performansı da düşecek.

    salt sql kullanarak, programlama dillerindeki gibi, ilk şart yanlışsa ikinci şarta bakılmayacak çözüm önerinizi bekliyorum.
     
  3. bselvan

    bselvan Daimi Üye

    Kayıt:
    15 Ocak 2012
    Mesajlar:
    739
    Beğenilen Mesajlar:
    1
    Şehir:
    İstanbul
    Normalde ilk koşul sağlanmıyorsa ikinci koşulu kontrol etmemesi gerekir. Bu yüzden de dönüşüm hatası vermemesi lazım. Aşağıdaki koşulun hata vermeden çalışması lazım.
    Kod:
    Where Isnumeric(deger) = 1 And 1 = CASE WHEN ISNUMERIC(deger)=1 THEN (CASE WHEN CAST(deger AS int) NOT BETWEEN altLimit AND UstLimit THEN 1 ELSE 0 END) ELSE 0 END
    
     
  4. selman

    selman Yeni Üye

    Kayıt:
    18 Şubat 2009
    Mesajlar:
    16
    Beğenilen Mesajlar:
    0
    teşekkürler.