8

SQL where 句に次のものがあります。これは、Oracle データベースに対して実行されています。フィールドは、sc_dtデータベースで日付フィールドとして定義されています。

sc_dt = TO_DATE('2011-11-03 00:00:00.0', 'YYYY-MM-DD')

次のエラーが発生します"date format picture ends before converting entire input string"

以下で小数秒 (.0この場合) を考慮しようとすると、次のエラーが発生します。

sc_dt = TO_DATE('2011-11-03 00:00:00.0', 'YYYY-MM-DD HH24:MI:SS.FF')

次のエラーが発生します"date format not recognized"

「from」文字列の.FFを説明するために が必要だと本当に思っています。、、 ....0も試しましたが、同じ結果になりました (この時点でストローをつかんでいます)。.FF1.FF2.FF9

私が見る限り、sc_dtフィールドには常に月/日/年の部分が入力されています (時間/分/秒の部分ではありません)。

上記のSQLを値を持つ準備済みステートメントとして実行しているJavaプログラムをデバッグしてい2011-11-03 00:00:00.0ます。

どうすればこれを回避できますか?

4

5 に答える 5

7

午前 0 時を過ぎた秒数オプションを使用する必要があります。何かのようなもの:

select TO_DATE('2011-11-03 00:00:01.1', 'YYYY-MM-DD HH24:MI:SS.SSSSS') from dual

またはこれ:

select TO_TIMESTAMP('2011-11-03 00:00:00.1', 'YYYY-MM-DD HH24:MI:SS.FF') from dual
于 2012-02-22T19:54:34.007 に答える
5

のようなOracleDATE列にsc_dtは、常に1秒までの日と時間のコンポーネントがあります。クエリツールとその構成方法(通常はセッションのNLS_DATE_FORMAT)によっては、時間コンポーネントがデフォルトで表示されていない可能性があります。ただし、明示的に実行することで時間コンポーネントを確認できますTO_CHAR

SELECT to_char( sc_dt, 'YYYY-MM-DD HH24:MI:SS' ) 
  FROM table_name

ただし、は秒までの時間を格納するだけなので、DATEフォーマットマスクで小数秒を使用することはできません。したがって、小数秒までの文字列の一部だけを抽出するには、このようなことを行う必要があります。文字列が常に小数点の前の19文字であることが保証されていない場合は、小数点INSTRを探してその前のすべてを取得することもできます。

TO_DATE( substr('2011-11-03 00:00:00.0', 1, 19), 'YYYY-MM-DD HH24:MI:SS')

ただし、これはJavaアプリケーションからのものであるため、正しいデータ型を使用する方がはるかに優れています。setDate文字列をバインドするのではなく、プリペアドステートメント のメソッドを使用してJava日付(java.sql.Date)をバインドする場合は、SQLステートメントで文字列形式を処理する必要はありません。

于 2012-02-22T20:04:36.027 に答える
3

私はこのスレッドが1年以上前のものであることを認識していますが...それを投げ込むための別のオプションは次のとおりです。

src_dt=select TO_DATE('2011-11-03 00:00:01.1234', 'YYYY-MM-DD HH24:MI:SS.?????') from dual;

注: 余分な「?」があります。いくつかの余分な「?」を付けることさえできることを示すために投げ込まれました。「?」で表される数字がソース時間文字列に対応する文字を持たない場合、Oracle からの苦情はありません。これは、受け取った秒数の精度が不明な場合に役立ちます。

このオプションは、ソース時間からの「小数秒」の形式にある程度の柔軟性を与えます。これが実際にどこかに文書化されているかどうかはわかりません。

于 2014-04-14T14:26:38.440 に答える
0

src_dt=select TO_DATE('2011-11-03 00:00:01.1', 'YYYY-MM-DD HH24:MI:SS.SSSSS') from dual

日付出力だけが必要な場合は、上記のものでうまくいくはずです。

于 2012-02-22T19:54:05.963 に答える