0

Oracle DATE列があり、その列の特定のレコードの値は

16/10/2005 11:13:34 AM.

今、フィルター文字列がフロントエンドから渡されるこのようなフィルターを入れています。

date_col between to_date('16-10-2005','DD-MM-YYYY') and to_date('16-10-2005','DD-MM-YYYY') 

ゼロ レコードを返します。なぜこうなった?時間に関係なく、オラクルは 2005 年 10 月 16 日の日付を持つすべてのレコードを返すと考えていました。時間も渡す必要がありますか/フロントエンドからは、日付のみを取得し、時間は取得しません。

4

3 に答える 3

2
date_col between to_date('16-10-2005','DD-MM-YYYY') 
     and to_date('16-10-2005','DD-MM-YYYY') 

は、2005 年 10 月 16 日の午前 0 時の値のみを返しDATEます。2005 年 10 月 16 日の任意の時刻のデータを取得する場合

date_col between to_date('16-10-2005','DD-MM-YYYY') 
             and to_date('16-10-2005 23:59:59','DD-MM-YYYY HH24:MI:SS') 

やります。そうでしょう

date_col between to_date('16-10-2005','DD-MM-YYYY') 
             and to_date('17-10-2005','DD-MM-YYYY') - interval '1' second

その秒を差し引かないとdate_col、2005 年 10 月 17 日の午前 0 時の値を持つ行も取得することになります。

truncに関数を適用することもできますdate_col

trunc(date_col) = date '2005-10-16'

しかし、それでは標準のインデックス ondate_colを使用できなくなります。通常、関数ベースのインデックスを作成する必要がありますtrunc(date_col)

CREATE INDEX idx_trunc_date_col
    ON table_name( trunc(date_col) );
于 2012-08-20T20:10:46.707 に答える
2

はい - 時間要素が必要です。

to_date('16-10-2005','DD-MM-YYYY') のデフォルトは午前 0 時です。つまり、2005 年 16 月 10 日のすべてのレコードを取得するには、

date_col >= to_date('16-10-2005','DD-MM-YYYY')
and date_col < to_date('17-10-2005','DD-MM-YYYY')
于 2012-08-20T20:10:53.860 に答える
1

翌日の最終日から1秒を引いたものにします...

date_col between to_date('16-10-2005','DD-MM-YYYY') 
    and to_date('16-10-2005 23:59:59','DD-MM-YYYY HH:MI:SS')
于 2012-08-20T20:08:47.747 に答える