0

データベースに関する私の経験のほとんどは SQL サーバーに関連しているため、私は Oracle に関しては特に優れた人物ではありません。

Oracleで単純な日付(時間またはタイムゾーンを含まない)に変換しようとしているJava日付があるので、日付が同じ日かどうかを単純に検索するカスタムmybatis SQLステートメントで使用できますユーザーインターフェースに入力されたものとして。MyBatis で起こっていることを反映した私のモック oracle クエリは、失敗した WHERE 句として以下に記述されています。

私の日付は、'Wed Jun 19 00:00:00 BST 2013' という形式で Oracle に入力されますが、残念ながら、その形式にはあまり柔軟性がありません。

私の失敗した WHERE 句は次のとおりです。

where TRUNC(s.logged_date) =  to_date('Wed Jun 19 00:00:00 BST 2013', 'DD-MON-YYYY');

次のエラーで失敗します: ORA-01858: 数値が必要な場所に数値以外の文字が見つかりました。

テーブル内の日付は DATE データ形式で格納されており、次のような WHERE 句を作成しようとしています。

 WHERE TRUNC(s.logged_date) = some date in the year 

行を返します。

WHERE 句を使用して、時間に関係なく日付の等価性を探しています。s.logged_date の値の形式は、DATE データ型列の DD-MON-YYYY です。

私は手渡さなければならなかった本を使用し、インターネットをかなり長い間探し回って、正しく機能する WHERE 句を作成してきたので、これで私を助けてくれることを本当に願っています.

ありがとう

4

2 に答える 2

2

あなたの問題はここにあります:

to_date('Wed Jun 19 00:00:00 BST 2013', 'DD-MON-YYYY')

文字列「Wed Jun 19 00:00:00 BST 2013」は、フォーマット マスク「DD-MON-YYYY」と一致しません。フォーマット マスクと一致するように文字列を '19-JUN-2013' としてフォーマットする必要があります。そうしないと、フォーマット マスクは 'DAY MON DD HH24:MI:SS TZD YYYY' になります。ただし、日付文字列に一致するように書式マスクを変更することを選択した場合、to_date() は使用できません。to_date() はタイムゾーンをサポートしていないためです。日付/時刻文字列でタイムゾーンをサポートする場合は、 to_timestamp_tz() が必要です。

日付/時刻の形式に関して、ここに含めることができるよりも多くの情報がここにあります

それが役立つことを願って....

于 2013-06-27T17:10:18.043 に答える