На самом деле, это стоит больше, чем вы думаете.
В MySQL эквивалент Oracle to_date()
равен str_to_date()
, а nls_date_language
будет соответствовать системной переменной lc_time_names
.
Однако , как объяснено в документации (выделено мое):
Эта переменная влияет на вывод функций DATE_FORMAT()
, DAYNAME()
и MONTHNAME()
.
lc_time_names
не влияет на функцию STR_TO_DATE()
или GET_FORMAT()
.
Таким образом, вы не сможете проанализировать дату в формате dd-mon-yyyy
, где mon
- это не английский sh месяц, используя только встроенные функции и системные переменные.
Единственное решение, которое я могу придумать, - это вручную перевести аббревиатуру даты перед синтаксическим анализом с большим количеством вложенных REPLACE()
с или с выражением CASE
... Тот факт, что некоторые названия месяцев совпадают между французским и Engli sh немного упрощает задачу:
select str_to_date(
case
when mystr like '%FEV%' then replace(mystr, 'FEV', 'FEB')
when mystr like '%AVR%' then replace(mystr, 'AVR', 'APR'),
when mystr like '%MAI%' then replace(mystr, 'MAI', 'MAY')
when mystr like '%JUI%' then replace(mystr, 'JUI', 'JUL'),
when mystr like '%AOU%' then replace(mystr, 'AOU', 'AUG')
end,
'%d-%b-%Y'
) mydate
from ...