2012-03-09 23 views
10

Ben @A ve SOMESCHEMA.SOMETABLE.SYSDATE bir tarihi veri türü olduğunu varsayarak, @A herhangi değerden büyük olurdu, SYSDATE Eğer DB2Herhangi Bir Tarih Veri Türü Null Null mı?

SELECT * FROM SOMESCHEMA.SOMETABLE WHERE SYSDATE > @A 

bu sorgu NULL olduğunu var?

Lütfen

Yardım edin. Şimdiden teşekkürler.

+3

DB2 ardından "ANSI NULL" Semantik "olmalıdır doğrudur sadece ikili bir operatör var EĞER NULL ", AFAIK. –

+1

@pst DB2 [ANSI] (http://www.dbforums.com/db2/765612-handing-null-values-db2.html#post2808106), ne demek istediniz? "NULL" _? –

cevap

8

NULL değerini içerebilen değerlerin karşılaştırılmasında yararlı olan başka bir yükleme, DISTINCT yüklemidir. Her iki sütun da eşit olmayan bir değer içeriyorsa, normal bir eşit karşılaştırma (COL1 = COL2) kullanarak iki sütunun karşılaştırılması doğru olacaktır. Her iki sütun da boşsa, sonuç yanlış olur, çünkü null hiçbir zaman başka bir değere eşit değildir, başka bir boş değer bile değildir. DISTINCT yüklemini kullanarak, boş değerler eşit kabul edilir. Bu nedenle, COL1 DEĞİLDİR, her iki sütun da null olmayan bir değer içeriyorsa ve her iki sütun da boş değer olduğunda COL2'den true olur.

Bir şey bilinmeyen bir değeri karşılaştırarak çünkü tüm karşılaştırma işlemleri yanlış olacağı anlamına gelir DB2 Null Handling

. Yani hangi karşılaştırma kullandığınız önemli değil (sadece IS NULL/IS NOT NULL işlemi işe yarar!), Yanlış olacaktır.

sorgu Eğer başka olasılık bir değer boş olup olmadığını test etmek IS NULL kullanmaktır

SELECT * 
    FROM SOMESCHEMA.SOMETABLE 
WHERE COALESCE(SYSDATE, TIMESTAMP_FORMAT('0001-01-01 23:59:59', 'YYYY-MM-DD HH24:MI:SS')) > @A 
+0

Yanıtladığınız için teşekkürler, ama bana biraz soluk görünüyor. Şöyle yazıyor: “null hiçbir zaman başka bir değere eşit değildir”, _equal_ _greater than_ durumuyla aynı mıdır? Lütfen yardım et. –

+0

Cevabım, karşılaştırmanın bir veya iki tarafının null olması durumunda (IS/IS NOT NULL dışında) tüm karşılaştırmaların başarısız olduğunu açıkça belirtmek için düzenledim. – Eggi

+1

Super duper ultra mega yardımlarınız için çok teşekkür ederim, ama sorgunuzda bir hata atacağı gibi, _fail_ ile ne demek istiyorsunuz? –

7

gibi bir şey kullanmalısınız çalışmak istiyorsanız:

SELECT * FROM SOMESCHEMA.SOMETABLE WHERE SYSDATE > @A OR SYSDATE IS NULL 

değeri içerecektir senin COALESCE işlevi yerine, döndürülen değerler kümesi. Sadece basit durumlarda çalışır.

0

iki null tarih (P.EndDate, C.EndDate) karşılaştırılması için bu çözümü kullanabilirsiniz:

[MinDate] = 
     CASE 
      WHEN 
       ISNULL(C.EndDate,P.EndDate) <= ISNULL(P.EndDate,C.EndDate) 
      THEN 
       ISNULL(C.EndDate,P.EndDate) 
      ELSE 
       ISNULL(P.EndDate,C.EndDate) 
     END 
İlgili konular