2

データベース:オラクル

簡易版:

テーブルTには次の列があります: D ( DATE タイプ)

今、テーブルは空です。

INSERT INTO T
    (D) VALUES (sysdate);

これで、テーブルには 22-AUG-14 を含む 1 つの行ができました。

次の WHERE 句がfalseなのはなぜですか?

SELECT * FROM T
    WHERE D = sysdate;

=> 0 行

次のクエリが機能します。

SELECT * FROM T
    WHERE TO_CHAR(D, 'DD/MM/YYYY') = TO_CHAR(sysdate, 'DD/MM/YYYY');

=> 1行

時間に関連する「精度の低下」があると思いますが (double と int に似ています)、なぜそれが可能なのでしょうか? 両方のタイプが DATE であるためです。

  • sysdate は、 http: //docs.oracle.com/cd/B19306_01/server.102/b14200/functions172.htm に従って DATE を返します。
4

1 に答える 1

9

sysdate時間も含まれるため、時間が変化し続けるため、このクエリは常に行を返しません

SELECT * FROM T
    WHERE D = sysdate;

これを試して

SELECT * FROM T
    WHERE trunc(D) = trunc(sysdate);
于 2014-08-22T15:26:22.133 に答える