дата и время на языке nls mysql - PullRequest
1 голос
/ 15 апреля 2020

необходимо преобразовать формат oracle sql в mysql.

to_date(25-JAN-2020,'DD-MON-YYYY','nls_date_language = FRENCH').

в mysql, мы можем изменить сеанс, чтобы изменить nls_date_language, но вместо изменения сеанс может изменить мы используем как выше oracle в mysql только с указанием даты и времени.

1 Ответ

0 голосов
/ 15 апреля 2020

На самом деле, это стоит больше, чем вы думаете.

В 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 ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...