2009-09-07 50 views
22

Cuando trato de ejecutar este fragmento:ORA-01861: literal no coincide con el formato de cadena

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"; 

me sale:

ORA-01861: literal does not match format string 

No hay ningún problema con la conexión de base de datos porque puedo ejecutar básica Comandos SQL

¿Cuál es el problema con esta afirmación?

+0

Intenta ejecutar esta declaración usando SQL Plus para ver qué tiene que decir al respecto. Si SQLPlus puede ejecutarlo, ado.net no debería tener ningún problema. – shahkalpesh

Respuesta

25

Retire la TO_DATE en la cláusula WHERE

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

y cambiar el código de

alarm_datetime 

El error proviene de la conversión to_date de una columna de fecha.

Explicación agregada: Oracle convierte su alarm_datetime en una cadena usando su formato de fecha dependiente de nls. Después de esto, llama a fecha con la máscara de fecha provista. Esto arroja la excepción.

7

El error significa que trataste de ingresar un literal con una cadena de formato, pero la longitud de la cadena de formato no era de la misma longitud que el literal.

Uno de estos formatos es incorrecto:

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

¿De qué sirve una respuesta en la que pone un ejemplo y dice que la mitad es incorrecta? – 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

justo antes de ejecutar la consulta: alter conjunto sesión NLS_DATE_FORMAT = "DD.MM.AAAA HH24: MI: SS"; o el formato que esté dando la información a la función de fecha. Esto debería corregir el error de ORA

+0

El código nunca debe depender de un NLS_DATE_FORMAT. Ese parámetro es útil para configurar cómo mostrar datos, pero no debe usarse para el procesamiento. –

Cuestiones relacionadas