2012-03-09 8 views
10

SYSDATEはそれが@ASOMESCHEMA.SOMETABLE.SYSDATEデータ型であると仮定すると、@Aの任意の値よりも大きくなり、NULLであれば、私はDB2Nullは、任意の日付のデータ型よりも大きいですか?

SELECT * FROM SOMESCHEMA.SOMETABLE WHERE SYSDATE > @A 

でこのクエリを持っていますか?

助けてください。前もって感謝します。

+3

DB2は、「ANSI NULL」の意味を持っている場合は、trueの場合にのみ二項演算子があるべき」 IS NULL "、AFAIK。 –

+1

@pst DB2は[ANSI]を持っています(http://www.dbforums.com/db2/765612-handing-null-values-db2.html#post2808106)、真である唯一のバイナリ演算子は何ですか? "無効である"_ ? –

答えて

8

NULL値を含むことができる値を比較するのに役立つ別の述語は、DISTINCT述部です。両方の列に同じ非NULL値が含まれている場合、通常の等価比較(COL1 = COL2)を使用して2つの列を比較すると、真となります。両方の列がNULLの場合、nullは他の値と決して等しくないため、結果はfalseになります。 DISTINCT述部を使用すると、NULL値は等しいとみなされます。したがって、COL1はNOT COL2のDISTINCTで、両方の列に同じ非NULL値が含まれている場合、および両方の列がNULL値である場合はtrueになります。あなたが何かに未知の値を比較しているため、すべての比較操作がfalseになることを意味し

DB2 Null Handling

。したがって、どの比較を使用しても(IS NULL/IS NOT NULL操作だけが動作します)、falseになります。

クエリが動作する場合は、別の可能性は、値がnullであるかどうかをテストするIS NULLを使用することです

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

回答ありがとうございますが、少しぼやけているようです。そこには、「nullは決して他の値と等しくありません」と、_equal_は_greater than_ conditionと同じですか?助けてください。 –

+0

比較の片側または両側にNULLが含まれていると、すべての比較が失敗することを明確にするために私の回答を編集しました(IS/IS NOT NULLを除く)。 – Eggi

+1

あなたの助けを借りてくれてありがとう、スーパーデュパーウルトラメガですが、クエリでエラーが発生するので、_fail_はどういう意味ですか? –

7

のようなものを使用する必要があります

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

はあなたに値が含まれます戻り値のセットは、COALESCEの代わりに機能します。それは単純なケースでのみ動作します。

0

次の2つのNULL可能日付(P.EndDate、C.EndDate)の比較のために、このソリューションを使用することができます。

[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 
関連する問題