1

次のSQLステートメントを使用していますが、構文が正しくないようです。

idSelectQuery=Select "numberprgn" 
              from "SMT1"."CM3R1M1" 
              where "category" != 'KM Document' 
          AND ("sysmodtime" - TO_DATE('1970-01-01', 'YYYY-MM-DD')) * 86400000 > ?

どこ '?' は現在のシステム時刻を数値で表したもので、実際にはエポック時間です。

このステートメントは、次の理由で失敗します。

ORA-00932:データ型に一貫性がありません:予期されたNUMBERがDATEを取得しました

sysmodtimeを?と比較できるようにする必要があります。時間の値、これを適切に行う方法はわかりませんが... sysmodtimeをcharにキャストしてからnumberにキャストできるかどうかはわかりません。これは、dateをnumberに直接キャストできないことがわかっているためです。

これを機能させるための提案はありますか?

ありがとう

4

1 に答える 1

4

私はあなたがしたいと思う

"sysmodtime" > TO_DATE('1970-01-01', 'YYYY-MM-DD') + (?/ 86400000)

仮定して ?1970 年 1 月 1 日からのミリ秒数を表します。このようにクエリを記述すると、「sysmodtime」でインデックスを使用できるようになります。

さて、現実的には、数値の時間を取り、それを日付に変換する関数を作成したいと思うでしょう。

CREATE FUNCTION epoch_to_date( p_epoch IN NUMBER )
  RETURN DATE
IS
BEGIN
  RETURN TO_DATE('1970-01-01', 'YYYY-MM-DD') + (p_epoch/ 86400000);
END;

クエリで呼び出すことができる

"sysmodtime" > epoch_to_date( ? )
于 2011-04-27T19:28:22.963 に答える