VARCHAR2
まず、データ型を使用してテーブルに日付またはタイムスタンプ データを格納しないでください。常に適切なデータ型 ( date
、timestamp
、timestamp with time zone
など) を使用する必要があります。間違ったデータ型でデータを格納すると、パフォーマンスの問題 (オプティマイザのカーディナリティの推定は一般に正確性が大幅に低下し、列のインデックス作成がさらに問題になります) につながるだけでなく、一部のアプリケーションが誤って文字列をテーブルの形式が間違っていると、さまざまなクエリがエラーをスローし始めたり、実行計画の微妙な変更によってエラーが突然発生したり (または停止したり) したりすることがあります。
end_time
次に、テーブルのすべての行のすべての文字列が (他の 2 つの述語が満たされているかどうかにかかわらず) 次の形式であると仮定します。YYYY-MM-DD HH24:MI:SS.FFF
SELECT COUNT(*)
FROM STGDBA.INTERACTIONS
WHERE APP_ID='Home Depot'
AND PEGA_ID ='0'
AND to_date(substr(END_TIME,1,length(end_time)-4),
'YYYY-MM-DD HH24:MI:SS' ) BETWEEN TO_DATE('2012-AUG-01', 'YYYY-MON-DD')
AND TO_DATE('2012-AUG-31', 'YYYY-MON-DD')
日付を日付に、文字列を文字列に常に比較する必要があるため、式の左側をto_char
. を呼び出すときは常に、明示的な書式マスクを指定する必要がto_date
あります。これは、私がここで行っていることです。また、 a にdate
はサブ秒の精度がないため、小数秒を削除する必要があります ( a と宣言end_time
した場合、これは問題になりませんtimestamp(3)
)。