2009-09-07 8 views
22

と一致していません: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コマンド。

このステートメントの問題点は何ですか?

+0

SQL Plusを使用してこの文を実行して、このことについてこれについて説明してください。 SQLPlusがそれを実行できるのであれば、ado.netは何の問題もないはずです。 – shahkalpesh

答えて

25

エラーが日付列のTO_DATE変換から来ているWHERE句

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

にTO_DATEを取り外し、

alarm_datetime 

にコードを変更します。

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

7

エラーは、書式文字列を含むリテラルを入力しようとしましたが、書式文字列の長さがリテラルと同じではないことを意味します。

これらのフォーマットの一つが間違っている:

TO_CHAR(t.alarm_datetime, 'YYYY-MM-DD HH24:MI:SS') 
TO_DATE(alarm_datetime, 'DD.MM.YYYY HH24:MI:SS') 
+1

例を書いて、その半分が間違っていると答えた場合の答えは何ですか? – PunchyRascal

0
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

だけでクエリを実行する前に: ALTER SESSIONセットNLS_DATE_FORMAT = "DD.MM.YYYY HH24:MI:SS"。 または日付関数に情報を与える形式。これにより、ORAエラーが修正されるはずです

+0

コードは決してNLS_DATE_FORMATに依存すべきではありません。このパラメータはデータの表示方法を設定するのに便利ですが、処理に使用しないでください。 –

関連する問題