0

2013 年 7 月 1 日から 2013 年 9 月 30 日までの特定の時間 (05:00 から 06:00 まで) を SQL 呼び出しでどのように表現すればよいですか?

MOPACTIVITY.MOPSTART フィールドを使用したいと考えています。この例は、07/01 から 09/30 までのすべてを示しています。同じ日付範囲の 05:00 ~ 06:00 のものが必要です。

ありがとうございました!

FROM MOPUSER.MOPACTIVITY
WHERE TO_CHAR(MOPACTIVITY.MOPSTART, 'yyyy-mm-dd hh24:mi') BETWEEN '2013-07-01 00:00:01' AND '2013-09-30 23:59:59'
4

3 に答える 3

3

日付と時刻の 2 つの比較を行います。

FROM MOPUSER.MOPACTIVITY
WHERE TO_CHAR(MOPACTIVITY.MOPSTART, 'yyyy-mm-dd') BETWEEN '2013-07-01' AND '2013-09-30' and
      TO_CHAR(MOPACTIVITY.MOPSTART, 'hh24:mi') BETWEEN '05:00' AND '05:59'

を使用して、2 番目の条件を簡略化することもできますhour()

FROM MOPUSER.MOPACTIVITY
WHERE TO_CHAR(MOPACTIVITY.MOPSTART, 'yyyy-mm-dd') BETWEEN '2013-07-01' AND '2013-09-30' and
      hour(MOPACTIVITY.MOPSTART) = 5
于 2013-07-02T14:47:19.017 に答える
0

インデックス (存在する場合) を活用する可能性のあるアプローチの 1 つは、MOPSTART次のようなものです。

WHERE
    MOPACTIVITY.MOPSTART >= DATE '2013-07-01'
    AND
    MOPACTIVITY.MOPSTART < DATE '2013-09-30' + 1
    AND
    TO_CHAR(MOPACTIVITY.MOPSTART, 'HH24') = '05'

これは、06:00 を含めたくないことを前提としています。

于 2013-07-02T16:01:58.063 に答える
0

どうやってやったの。@Gordon Linoffの回答の方が好きです!

SELECT MOPACTIVITY.MOPID ,
TO_CHAR(MOPACTIVITY.MOPSTART, 'yyyy-mm-dd hh24:mi') AS MOPSTART_DATE,
TO_CHAR(MOPACTIVITY.MOPEND, 'yyyy-mm-dd hh24:mi') AS MOPEND_DATE,
MOPACTIVITY.MOPCREATOR,
MOPACTIVITY.MOPIMPLEMENTOR
FROM MOPUSER.MOPACTIVITY
WHERE TO_CHAR(MOPACTIVITY.MOPSTART, 'yyyy-mm-dd') BETWEEN '2013-07-01' AND '2013-09-30'
AND to_number(to_char(MOPACTIVITY.MOPSTART, 'sssss')) between 18000 and 21600

Order by MOPACTIVITY.MOPID
于 2013-07-02T14:53:33.717 に答える