7

SQL ステートメントがあり、Java で H2 インメモリ データベースを実行しようとしています。次の例外がスローされました。

SQL:

SELECT ACCT_RULE_ID, ACCT_ACTION_ID 
  FROM ACCT_RULE 
 WHERE (ACCT_ACTION_ID = ?) 
   AND (START_DATETIME <= to_char(?, 'mm/dd/yyyy HH:MI:SS AM')) 
   AND (STOP_DATETIME > to_char(?, 'mm/dd/yyyy HH:MI:SS AM')) 

最初のパラメーターを Id に置き換え、2 番目と 3 番目のパラメーターを新しい Date() 値に置き換えます。

Exception:
Caused by: org.h2.jdbc.JdbcSQLException: Function "TO_DATE" not found; SQL statement:
4

4 に答える 4

4

H2 の日時フィールドから時間部分を削除する 1 つの方法は、フィールドを文字列としてフォーマットしてから解析することです。これは私にとってはうまくいきました。

PARSEDATETIME(FORMATDATETIME(field_name, 'yyyy-MM-dd'), 'yyyy-MM-dd')

H2 の解析およびフォーマットの日付関数は、java.text.SimpleDataFormat セマンティクスに従います。

はい、超最適化されていません。単体テストには H2 のみを使用するため、これで問題ありません。

于 2016-03-25T14:23:55.713 に答える
2

H2 データベースには TO_CHAR() 関数がありません。しかし、H2 データベースには sysdate、dual、varchar2 があり、H2 データベースで実行される Oracle クエリを非常に簡単に作成できます。そのため、代わりに H2 データベース関数エイリアスを作成して、日付/タイムスタンプを形式で処理するようにすることができます。TO_CHAR(sysdate, 'DD/MM/YYYY HH24:MI:SS')H2 データベースで使用できます。

于 2014-02-04T05:04:42.173 に答える