Я сталкиваюсь с ошибкой: неверный синтаксис ввода для типа цифры c: "" при выполнении запроса ниже - PullRequest
0 голосов
/ 08 апреля 2020

Я сталкиваюсь с ошибкой: неверный синтаксис ввода для типа цифры c: "" при выполнении запроса ниже.

Получение параметров в Java

Integer Id_systemUser = systemUser.getId();
Integer userid = systemUser.getId();

MyQuery

Query query = em.createNativeQuery(
                    "SELECT (SELECT count(*)  FROM ResponseTable Where  timedate BETWEEN :sentDate and :enddate  and Id_systemUser=:Id_systemUser ) AS"
                            + "receivecount,(SELECT count(*)  FROM ResponseTable Where  timedate BETWEEN :sentDate and :enddate  and Id_systemUser=:Id_systemUser and processCompletetime IS NOT NULL ) AS processcount,"
                            + "(select SUM(CAST(msg_cost AS DECIMAL(9,2))) from sql_reciept_sms where  dlr_mask='31' and time BETWEEN :sentDate and :enddate  and userid=:userid) AS loadedcount,(select SUM(CAST(msg_cost AS DECIMAL(9,2)))"
                            + " from sql_reciept_sms where dlr_mask_smsc_sub='8'  and time BETWEEN :sentDate and :enddate  and userid=:userid) AS sentcount,(select SUM(CAST(msg_cost AS DECIMAL(9,2))) from sql_reciept_sms where time BETWEEN "
                            + ":sentDate and :enddate and userid=:userid and dlr_mask_del_failure='2') AS failprocesscount,(select SUM(CAST(msg_cost AS DECIMAL(9,2))) from sql_reciept_sms where dlr_mask_del_success='1' and time BETWEEN :sentDate"
                            + " and :enddate  and userid=:userid) AS delicount,(select SUM(CAST(msg_cost AS DECIMAL(9,2))) from sql_reciept_sms where dlr_mask_smsc_rej='16' and time BETWEEN :sentDate and :enddate  and userid=:userid) AS "
                            + "rejcount,(select SUM(CAST(msg_cost AS DECIMAL(9,2))) from sql_reciept_sms where  dlr_mask_smsc_sub='8' and dlr_mask_smsc_rej IS NULL and dlr_mask_del_failure IS NULL and dlr_mask_del_success IS NULL "
                            + "and time BETWEEN :sentDate and :enddate  and userid=:userid) AS nodelrec,(select SUM(CAST(msg_cost AS DECIMAL(9,2))) from sql_reciept_sms where  dlr_mask='31' and dlr_mask_smsc_rej "
                            + "IS NULL and dlr_mask_del_failure IS NULL and dlr_mask_del_success IS NULL and dlr_mask_smsc_sub IS NULL and time BETWEEN :sentDate and :enddate  and userid=:userid and binfo IS NULL) AS quatmno,"
                            + "(SELECT count(*) from sql_reciept_sms where time BETWEEN :sentDate and :enddate  and userid=:userid and binfo<>'' and dlr_mask_smsc_rej IS NULL and dlr_mask_del_failure IS NULL and dlr_mask_del_success "
                            + "IS NULL and dlr_mask_smsc_sub IS NULL) as failprocess,(Select SUM(CAST(msg_cost AS DECIMAL(9,2))) from sql_reciept_sms where time BETWEEN :sentDate and :enddate and dlr_mask_del_success='1' and dlr_mask_smsc_sub IS"
                            + " NULL and userid=:userid)   as nosenbdel,(Select SUM(CAST(msg_cost AS DECIMAL(9,2))) from sql_reciept_sms where  time BETWEEN :sentDate and :enddate and dlr_mask_del_failure='2' and dlr_mask_smsc_sub IS NULL "
                            + "and userid=:userid) as nosenbfail");

Добавление параметров

query.setParameter("Id_systemUser", (int) Id_systemUser);
query.setParameter("userid", (int) userid);
query.setParameter("sentDate", sentDate);
query.setParameter("enddate", enddate);

При выполнении

query.getResultList()

Ошибка

2020-Apr-07 18 WARN  SqlExceptionHelper:127 - SQL Error: 0, SQLState: 22P02
2020-Apr-07 18 ERROR SqlExceptionHelper:129 - ERROR: invalid input syntax for type numeric: ""

РЕДАКТ. 1: enter image description here Это значения, которые не равны 1.

Проблема связана с 3-м подзапросом

(SELECT Sum(Cast(msg_cost AS DECIMAL(9, 2))) 
        FROM   sql_reciept_sms 
        WHERE  dlr_mask = '31' 
               AND time BETWEEN 'Wed Apr 01 00:00:00 SAST 2020' AND 
                                'Fri Apr 10 00:00:00 SAST 2020' 
               AND userid = '14630824')             AS loadedcount, 

1 Ответ

0 голосов
/ 08 апреля 2020

Из комментариев, я предполагаю, что это должен быть неправильный синтаксис при обработке пустых строк или нулевых значений. Попробуйте использовать следующий синтаксис приведения:

Используйте следующий синтаксис:

Sum(coalesce(cast(nullif(msg_cost ,'') as DECIMAL(9,2)),0))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...