39

このスニペットを実行しようとすると:

cmd.CommandText = "SELECT alarm_id,definition_description,element_id,
    TO_CHAR (alarm_datetime, 'YYYY-MM-DD HH24:MI:SS'),severity,
    problem_text,status FROM aircom.alarms 
    WHERE status = 1 and 
    TO_DATE (alarm_datetime,'DD.MM.YYYY HH24:MI:SS') > TO_DATE ('07.09.2008 
    09:43:00', 'DD.MM.YYYY HH24:MI:SS') 
    order 
    by ALARM_DATETIME desc";

私は得る:

ORA-01861: literal does not match format string

基本的なSQLコマンドは実行できるので、データベース接続には問題ありません。

この発言の問題点は何ですか?

4

6 に答える 6

39

WHERE 句の TO_DATE を削除します

TO_DATE (alarm_datetime,'DD.MM.YYYY HH24:MI:SS')

コードを次のように変更します

alarm_datetime

エラーは、日付列の to_date 変換から発生します。

追加された説明: Oracle は、nls 依存の日付形式を使用して、alarm_datetime を文字列に変換します。この後、提供された日付マスクを使用して to_date を呼び出します。これにより、例外がスローされます。

于 2009-09-07T07:09:40.403 に答える
9

このエラーは、フォーマット文字列を含むリテラルを入力しようとしたが、フォーマット文字列の長さがリテラルと同じ長さではなかったことを意味します。

次のいずれかの形式が正しくありません:

TO_CHAR(t.alarm_datetime, 'YYYY-MM-DD HH24:MI:SS')
TO_DATE(alarm_datetime, 'DD.MM.YYYY HH24:MI:SS')
于 2009-09-07T07:11:41.843 に答える
1
SELECT alarm_id
,definition_description
,element_id
,TO_CHAR (alarm_datetime, 'YYYY-MM-DD HH24:MI:SS')
,severity
, problem_text
,status 
FROM aircom.alarms 
WHERE status = 1 
    AND TO_char (alarm_datetime,'DD.MM.YYYY HH24:MI:SS') > TO_DATE ('07.09.2008  09:43:00', 'DD.MM.YYYY HH24:MI:SS') 
ORDER BY ALARM_DATETIME DESC 
于 2012-06-04T06:48:32.277 に答える