0

act_start timestamp(6)Oracle 10 DBの列を持つテーブルからのクエリに問題があります。act_start10 日より古いすべての行 (当日から 10 日より古いフィールド値を持つ行) を取得したいのですが、失敗します。

さまざまなクエリで試しましたが、機能しません

例えば:

select act_start 
  from wfmactionstates_tab 
 where act_start < (systimestamp -10).

テーブルのすべての行が返されます。

select * 
  from wfmactionstates_tab 
 where cast(act_start as date) < (sysdate -10).

すべてのテーブル行が返されます

4

1 に答える 1

2

他の人が観察したように、クエリは SQL 用語で正しいです。したがって、それらがすべての行を返す場合、考えられる結論は 1 つだけです。つまり、すべての行に 10 日以上前のデータが含まれているということです。

これが期待したものではない場合 (そして、ここで質問をしているという事実がそうではないことを示唆している場合)、データに問題があるに違いありません。2000 年問題の変種である可能性があります。データベース内のデータに、日付の世紀の要素が欠落している可能性があります。したがって、2013 年 1 月 26 日と思われるものは、データベースでは 26-JAN-0013 (または、おそらく - あまりありませんが - 26-JAN-1913) として保持されます。明らかにそれは 10 日以上前のことです。

これが十分に簡単に当てはまるかどうかを確認できます。

select distinct to_char(your_date, 'CC') from your_table;

私が正しければ、これは戻りません21。次に、データベース内のすべての日付の世紀が間違っているのはなぜですか? これは、データ入力サブシステムを作成した開発者にとっての質問です。

于 2013-01-27T21:34:50.950 に答える