1. ホーム
  2. sql

[解決済み] OracleのWhere句のDateTimeは?

2023-01-30 05:50:47

質問

私はこのようなSQLを持っています。

SELECT EMP_NAME, DEPT
FROM EMPLOYEE
WHERE TIME_CREATED >= TO_DATE('26/JAN/2011','dd/mon/yyyy')

-> これは10行を返し、TIME_CREATED = '26-JAN-2011'です。

これを実行すると、行が返されません。

SELECT EMP_NAME, DEPT
    FROM EMPLOYEE
    WHERE TIME_CREATED = TO_DATE('26/JAN/2011','dd/mon/yyyy')

-> greater than を削除しました。

理由は何ですか?

どのように解決するのですか?

はい: TIME_CREATED には、日付と 時間 . 使用方法 TRUNC を使って、時刻を切り取ります。

SELECT EMP_NAME, DEPT
FROM EMPLOYEE
WHERE TRUNC(TIME_CREATED) = TO_DATE('26/JAN/2011','dd/mon/yyyy')

UPDATEです。

Dave Costa が下のコメントで指摘しているように、これは Oracle がカラムのインデックスを使用しないようにするものです。 TIME_CREATED が存在する場合、Oracle はそのインデックスを使用できなくなります。この問題のない別の方法は、次のとおりです。

SELECT EMP_NAME, DEPT
FROM EMPLOYEE
WHERE TIME_CREATED >= TO_DATE('26/JAN/2011','dd/mon/yyyy') 
      AND TIME_CREATED < TO_DATE('26/JAN/2011','dd/mon/yyyy') + 1