Oracle .ManagedDataAccess.Client.OracleException: 'ORA-01830: изображение в формате даты заканчивается перед преобразованием всей входной строки' - PullRequest
0 голосов
/ 08 марта 2020

Я получаю сообщение об ошибке

Oracle .ManagedDataAccess.Client.OracleException: 'ORA-01830: изображение в формате даты заканчивается перед преобразованием всей входной строки'

при определении объема с помощью кода c# и запроса oracle:

public DataTable empcount(string strtdate, string enddate)
{

        string cString = ConfigurationManager.ConnectionStrings["greft"].ToString();

        OracleConnection conn = new OracleConnection(cString);
        OracleCommand cmd2 = new OracleCommand();
        cmd2.CommandText = "Select (sum(emp)) from emp_rec where emp_typ = 'M'and emp_stat!= 'ON'and trunc(join_start) >= TO_CHAR(TO_DATE(:sdate, 'DD-MM-YY'), 'DD-MON-YY') and trunc(join_end) <= TO_CHAR(TO_DATE(:edate, 'DD-MM-YY'), 'DD-MON-YY') ";
        cmd2.Parameters.Add(":sdate", strtdate);
        cmd2.Parameters.Add(":edate", enddate);
        cmd2.Connection = conn;
        OracleDataAdapter da = new OracleDataAdapter(cmd2);
        DataTable dt = new DataTable();           
        da.Fill(dt);
        conn.Dispose();
        return dt;
}

В таблице join_start и join_end имеют дату в формате, подобном '02 -MAY-2019 ' , Ввод: sdate &: edate будет иметь формат мм / дд / гггг (например, 05/01/2019).

1 Ответ

1 голос
/ 08 марта 2020

Столбец REQ_START_TIME имеет тип данных VARCHAR2(11) со значениями, такими как 02-MAY-2019

Значение параметра sdate представляет собой строку со значениями, такими как 05/01/2019

Я вижу две проблемы

Trun c в столбце символов

trunc(REQ_START_TIME) - вам нужно преобразовать строку в DATE перед ее усечением (или даже лучше) сохранить значение в столбце DATE!)

Маска 'DD-MM-YY' для значения 05/01/2019

Преобразовать предикат в

where trunc(to_date(REQ_START_TIME,'DD-MON-YYYY')) >=  TO_DATE(:sdate, 'DD/MM/YYYY')

Общая рекомендация - не сохранять значения DATE в символьном столбце в базе данных

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...