oracle sql - не числовой символ был найден там, где ожидалось числовое значение

Я знаю, что есть множество сообщений об исправлении этой ошибки, но я просто не понимаю этого!

val_strg1 значение 01.04.2016, Я хочу использовать это, а не показывать строки, где эта дата старше текущей даты (т.е. and trunc(sysdate) < dv.val_strg1).

Но, хотя я использовал формат to_date, я все еще получаю a non-numeric character was found where a numeric was expected ошибка?

Я пробовал несколько форматов to_date;

to_date(val_strg1,'DDMMYYYY'), to_date(val_strg1,'DD-MM-YYYY')

Следующее дает мне 'not a valid month' ошибка?

to_date(val_strg1,'DD-MON-YYYY')

Мой сценарий...

select val_strg, val_strg1, to_date(val_strg1,'DDMMYYYY')
from sd_domainval_org 
where name = 'HYPERCARE_CUNR'
order by sort_no

Как я могу использовать val_strg1 как свидание?

4 ответа

Кажется, вы используете текстовый столбец (например, VARCHAR2) для даты. И вы говорите, что

to_date(val_strg1, 'DD.MM.YYYY')

приводит к ошибке. Таким образом, у вас есть значение в этом столбце, которое не соответствует шаблону. Вот запрос для поиска таких недействительных записей:

select * 
from domainval
where name = 'HYPERCARE_CUNR'
and not regexp_like(val_strg1, '^[[:digit:]]{2}\.[[:digit:]]{2}\.[[:digit:]]{4}$');

Затем вы можете исправить неправильные записи, но лучшим решением, конечно, было бы вообще не хранить даты в строковых столбцах. Вместо этого используйте столбцы даты, чтобы не было таких проблем.

В этом случае вы должны настроить форматирующую строку, чтобы она точно соответствовала вашей структуре даты

select val_strg, val_strg1, to_date(val_strg1,'DD.MM.YYYY')
from sd_domainval_org 
where name = 'HYPERCARE_CUNR'
order by sort_no;

Если ваша строковая дата val_strg1 имеет форму "ДД.ММ.ГГГГ" (то есть "01.04.2016"), то вы должны использовать to_date(val_strg1, "ДД.ММ.ГГГГ");
Например: выберите to_date('01.04.2016',' ДД.ММ.ГГГГ) из двойного;
Если у вас снова возникают ошибки, возможно, у вас есть строка в наборе записей, которая не имеет допустимой формы для функции to_date (проверьте значения в столбце val_strg1).
До свидания,
Игорь

Я нашел ответ...

and trunc(sysdate) < to_date(regexp_substr(val_strg1, '^[[:digit:]]{2}\.[[:digit:]]{2}\.[[:digit:]]{4}$'),'DD.MM.YYYY')

... кажется, работает нормально.

Другие вопросы по тегам