web-dev-qa-db-ja.com

ORA-01861:リテラルは書式文字列と一致しません

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

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コマンドを実行できるため、データベース接続に問題はありません。

この声明の問題は何ですか?

33
mcgoncu

WHERE句のTO_DATEを削除します

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

そしてコードを

alarm_datetime

エラーは、日付列のto_date変換に起因します。

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

32
Christian13467

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

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

TO_CHAR(t.alarm_datetime, 'YYYY-MM-DD HH24:MI:SS')
TO_DATE(alarm_datetime, 'DD.MM.YYYY HH24:MI:SS')
8
OMG Ponies

クエリを実行する直前:alter session set NLS_DATE_FORMAT = "DD.MM.YYYY HH24:MI:SS";または、日付関数に情報を提供している形式。これでORAエラーが修正されます

0
Vijay
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 
0
sweta