mysql中nls语言的日期时间

Posted

技术标签:

【中文标题】mysql中nls语言的日期时间【英文标题】:date time with nls language in mysql 【发布时间】:2020-07-28 07:13:35 【问题描述】:

需要将oracle格式的sql转成mysql

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

在 mysql 中,我们可以通过更改会话来更改 nls_date_language,但是我们可以像上面那样在 mysql 中使用单独的日期时间来代替更改会话。

【问题讨论】:

【参考方案1】:

其实,比你想象的值。

在 MySQL 中,Oracle 的 to_date() 等价于 str_to_date(),而 nls_date_language 将对应于系统变量 lc_time_names

然而,就像explained in the documentation(重点是我的):

此变量会影响 DATE_FORMAT()DAYNAME()MONTHNAME() 函数的输出。

lc_time_names 不影响STR_TO_DATE()GET_FORMAT() 功能。

因此,您实际上无法解析 dd-mon-yyyy 格式的日期,其中 mon 是非英语月份,仅使用内置函数和系统变量。

我能想到的唯一解决方案是在解析之前手动翻译日期缩写,使用大量嵌套的REPLACE()s 或CASE 表达式......事实上,一些月份名称确实在法语之间匹配英语稍微简化了任务:

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 ...

【讨论】:

以上是关于mysql中nls语言的日期时间的主要内容,如果未能解决你的问题,请参考以下文章

4.06.数字或日期转换为字符串.TO_CHAR()

oracle时间日期处理

Oracle数据库插入日期格式字符串给date类型字段,nls_date_format参数值作用

Oracle SQL Developer 在导出时忽略 NLS

ORACLE NLS_DATE_FORMAT设置

日期以时间格式合并