0

私のクエリは次のようになります。

select *
from mytable
where date_field between to_date(#from#, 'YYYY/MM/DD HH24:MI')
   and to_date(#to#, 'YYYY/MM/DD HH24:MI')

例として:

if from = 2012/07/18 00:00 and
   to   = 2012/07/18 00:09

これには、タイムスタンプ2012/07/18 00:09:01が から までのレコードが含まれ2012/07/18 00:09:59ますか?

または、ステートメントを次のように変更する必要があります。

select *
from mytable
where date_field >= to_date(#from#, 'YYYY/MM/DD HH24:MI')
   < to_date(#to#, 'YYYY/MM/DD HH24:MI')

ここで from : 2012/07/18 00:00 & to: 2012/07/18 00:10 に置き換えると、真夜中から真夜中過ぎの 9M59S までのタイムスタンプを持つすべてのレコードが得られます。

4

4 に答える 4

1

between句は、両方の間隔境界を受け入れます。私はあなたに2番目のオプションを提案します

select *
from mytable
where date_field >= to_date(#from#, 'YYYY/MM/DD HH24:MI')
   < to_date(#to#, 'YYYY/MM/DD HH24:MI')

この記事はおもしろいと思うかもしれません。

于 2012-08-12T14:40:57.397 に答える
0

日付変換は、値をすべての日付要素を含む日付に変換します。文字列に秒を指定していないため、これらは0になります。

つまり、「:01」〜「:59」の範囲は含まれません。

文字列を操作していて、文字列には比較のために適切な順序で日付要素があるので、代わりに文字列比較を実行してみませんか。

where to_char(datefield, 'YYYY/MM/DD HH24:MI') between #from# and #to#

これは、日付の計算をいじることなく、まさにあなたが望むことを行うと思います。

#to#列をインクリメントし、間にではなく「<」を使用することで、提案に応じてステートメントを変更することもできます。

于 2012-08-11T15:59:42.247 に答える
0

あなたはこのようなことをすることができます:

SELECT *
  FROM mytable
 WHERE date_field between to_date(#from#, 'YYYY/MM/DD HH24:MI')
   AND to_date(#to#||':59', 'YYYY/MM/DD HH24:MI:SS')
于 2012-08-11T17:48:16.140 に答える
0

DATE00:09:01 と 00:09:59 の両方が 00:09:00 の「終了」時刻の後に来るため、要素の日付部分を無視します。いいえ、このクエリにはそれらのレコードは含まれません。

これらのレコードを含めたい場合は、「to」時間を 00:10:00 に延長するかTRUNC、レコードのタイムスタンプを最も近い分に延長する必要があります。

編集:

あなたの from と to が分までしか正確でない場合、私はこれを行います:

SELECT *
  FROM mytable
 WHERE date_field >= to_date(#from#, 'YYYY/MM/DD HH24:MI') 
   AND date_field <  to_date(#to#,   'YYYY/MM/DD HH24:MI') + 1/24/60/60 /* 1 minute */

また、from と to には必ずバインド変数を使用してください。これはColdFusionですか?その場合は、 を使用しますcfqueryparam

于 2012-08-11T15:04:21.047 に答える