1

タイムスタンプ データ型の 2 つの列start_timeend_time. 形式は'2013-5-19 09:00:00' のようなものです。

ユーザーが日付を入力すると、 2013-5-19のようになります。ユーザーが入力した日付の最大値を取得するにはどうすればよいですか?

Select max(end_time) from appointment
where ...
4

3 に答える 3

1

WHERE 句で TRUNC などの関数を使用すると、オプティマイザーがその列のインデックスを使用できない場合があります (もちろん、その特定の関数と列に関数ベースのインデックスがある場合を除きます)。特定の日付 (指定された日付コンポーネント YYYY、MM、および DD のみ) に一致するテーブル内のすべての行を検索する必要がある、このようなケースでは、範囲比較を使用できることがわかりました。

DECLARE
  dtSome_date  DATE := TO_DATE('19-MAY-2013', 'DD-MON-YYYY');
BEGIN
  FOR aRow IN (SELECT *
                 FROM APPOINTMENT e
                 WHERE e.END_TIME BETWEEN dtSome_date
                                      AND dtSome_date + INTERVAL '1' DAY - INTERVAL '1' SECOND)
  LOOP
    ...whatever...
  END LOOP;
END;

共有してお楽しみください。

于 2013-05-19T12:40:37.247 に答える