Oracle: Почему to_date () принимает двухзначный год, когда у меня есть 4 цифры в строке формата?- а как применить 4 цифры? - PullRequest
0 голосов
/ 21 ноября 2018

Я хочу проверить правильность даты.(Давайте не будем говорить о том факте, что дата хранится в varchar, пожалуйста ...)

Даты хранятся как DDMMYYYY, так что, например, 24031950 является правильной датой.240319 нет.

Поэтому я делаю это, когда вызов работает, это правильная дата:

select to_date('24031950','DDMMYYYY') from dual;

Но, к сожалению, это также не возвращает ошибку:

select to_date('240319','DDMMYYYY') from dual (why?);

Но интересно, что этот не работает:

select to_date('190324','YYYYMMDD') from dual;

Итак, как применить проверку к 4-значному году с заданной маской формата?

Спасибо!

Ответы [ 3 ]

0 голосов
/ 21 ноября 2018

Чтобы проверить, находится ли он в правильном формате без исключений, вы также можете использовать функции регулярных выражений.Один из возможных способов - проверить, содержит ли строка 8 цифр:

select REGEXP_INSTR  ('24031950', '[0-9]{8}') from dual;
1


select REGEXP_INSTR  ('240350', '[0-9]{8}') from dual;
0
0 голосов
/ 21 ноября 2018

Просто дополнительная заметка к ответу Мэта.fx действует как переключатель в строке.

Например, TO_DATE('2019-11-5','fxYYYY-MM-DD') выдает ошибку ORA-01862, поскольку точное соответствие применяется ко всей строке.Если вам нужно точное совпадение только для частей строки, используйте, например,

TO_DATE('2019-11-5','fxYYYY-MM-fxDD')

. В этом случае YYYY-MM- должно точно соответствовать, тогда как DD применяет гибкое (или ленивое) совпадение.

0 голосов
/ 21 ноября 2018

Цитирование документы :

База данных Oracle преобразует строки в даты с некоторой гибкостью.[...]

И я верю, что вы видите гибкость.Вы можете отключить его с помощью модификатора fx:

FX: требуется точное соответствие между символьными данными и моделью формата

select to_date('240319','fxDDMMYYYY') from dual;

ДаетОшибка ORA-01862.

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