Видя ORA-01858: не числовой символ c был найден там, где ожидалось числовое значение c - PullRequest
0 голосов
/ 11 февраля 2020

Ниже приведен мой запрос для Oracle SQL Разработчик:

INSERT INTO ENROLLMENTS (DATE,PARTNER_NAME,ENROLLMENTS)
    SELECT TO_CHAR(TS, 'DD-MON-YYYY HH AM') AS DATE, mrch_bnft_cd, COUNT(*)
    FROM ENROLLMENTS 
    WHERE TS > trunc(sysdate-1/24, 'HH') + 5/24 
    AND TS < trunc(sysdate, 'HH') + 5/24
    GROUP BY TO_CHAR(TS, 'DD-MON-YYYY HH AM'), mrch
    ORDER BY TO_CHAR(TS, 'DD-MON-YYYY HH AM'), mrch_bnft

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

ORA-01858: номер не указан c символ был найден там, где цифра c была ожидаемой ошибкой

, но ошибка не говорит мне, где. Любые идеи?

DATE = TIMESTAMP(6)
TS = TIMESTAMP(6)  
PARTNER = VARCHAR2(35 BYTE)  
ENROLLMENTS = NUMBER  
MRCH_BNFT= VARCHAR2(35 BYTE)

1 Ответ

2 голосов
/ 11 февраля 2020

Обычно вы пытаетесь сохранить строку, которая представляет дату, в поле отметки времени. Если вы замените:

TO_CHAR(TS, 'DD-MON-YYYY HH AM')

на

TRUNC(TS, 'hh24')

во всех 4 местах, это должно работать.

INSERT INTO ENROLLMENTS (DATE,PARTNER_NAME,ENROLLMENTS)
    SELECT   TRUNC(TS, 'hh24') AS DATE, mrch_bnft_cd, COUNT(*)
    FROM     ENROLLMENTS 
    WHERE    TS > trunc(sysdate-1/24, 'HH') + 5/24 
    AND      TS < trunc(sysdate, 'HH') + 5/24
    GROUP BY TRUNC(TS, 'hh24'), mrch
    ORDER BY TRUNC(TS, 'hh24'), mrch_bnft
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...