ORA-01858 при использовании функции TO_DATE - PullRequest
0 голосов
/ 19 декабря 2018
select * 
from GM_STANDARD_UPLOAD_TEMP t
where  
    to_Date('24-DEC-2017') >  to_date(T.COL34) 
    and T.COL34 IS NOT NULL
    AND UPLOAD_BATCH_ID = 'UH00002319122018025335' 
    AND USER_AID = 'US000000' 
    and T.record_no > 1 
    and T.TRANS_TYPE='ADD';

Здесь мое значение t.col34 исходит из таблицы, в которой тип данных столбца равен varchar2(20).Я попытался сравнить это со значениями, но через некоторое время я получил следующую ошибку:

ORA-01858: не числовой символ был найден там, где ожидалось число

1 Ответ

0 голосов
/ 19 декабря 2018

Вы не используете to_date правильно.Эта функция Oracle ожидает второй аргумент, который определяет формат заданной входной строки.

to_Date('24-DEC-2017') 

Должен быть записан как:

to_Date('24-DEC-2017', 'dd-mmm-yyyy') 

Или:

to_Date('24-DEC-2017', 'dd-mon-yyyy', 'nls_date_language = american')

То же самое относится и к столбцу T34, который, как вы сказали, является VARCHAR2.Вам необходимо указать, в каком формате строки даты хранятся в этом столбце.Предполагая, что это тот же формат, что и '24-DEC-2017', вы хотите:

 to_Date('24-DEC-2017', 'dd-mmm-yyyy') >  to_date(T.COL34, 'dd-mmm-yyyy')

Подробнее см. Модели формата даты и времени Oracle .

PS: обратите вниманиечто хранение дат в столбце VARCHAR является плохой практикой и его следует избегать (подвержено ошибкам, неэффективно, ...).Oracle предоставляет тип данных DATE, который предназначен для этого варианта использования (наряду с различными другими связанными типами данных даты).

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