Учитывая строковое представление дня недели (например, Monday, Mardi, الثلاثاء и т. д.) и NLS_DATE_LANGUAGE, есть ли способ < em>проверка того, что этот день недели действителен?
Почему это сложно спросите вы? Что ж, если бы это был просто английский язык, очевидно, что нужно было бы сделать что-то вроде следующего:
if <day_variable> in ('Monday','Tuesday', ...) then
...
Я пытаюсь сделать это расширяемо для нескольких стран, и, поскольку я не знаю (и не могу беспокоиться), выписывать все дни недели для всех текущих и будущих NLS_DATE_LANGUAGE, это не вариант .
Следующий вариант — явный TO_DATE()
, который прекрасно работает с пятницей — я подозреваю, что это совпадение, потому что сейчас май, но с треском проваливается с остальной частью недели:
SQL> select to_date('Friday', 'Day') as d from dual;
D
----------
2015-05-01
SQL> select to_date('Monday', 'Day') as d from dual;
select to_date('Monday', 'Day') as d from dual
*
ERROR at line 1:
ORA-01835: day of week conflicts with Julian date
Это интересная ошибка... Oracle рекомендует:
Удалите значение дня недели из спецификации даты или введите правильный день недели для даты по юлианскому календарю.
Удаление дня недели на самом деле не вариант, поскольку это все, что меня интересует, и у меня нет неправильного дня недели для моей даты по юлианскому календарю, потому что у меня нет даты по юлианскому календарю.
Обходной путь, предложенный в другом месте подтвердить и использовать альтернативные форматы даты (Dy
, dy
, FMDy
и т. д.), очевидно, приводит к той же ошибке.
Похоже, что Oracle внутренне представляет все даты как даты по юлианскому календарю и путается в этой ситуации.
Как я могу проверить правильность названного дня в Oracle?