mysql中nls语言的日期时间
需要将oracle格式的sql转换为mysqlmysql中nls语言的日期时间,mysql,sql,oracle,date,select,Mysql,Sql,Oracle,Date,Select,需要将oracle格式的sql转换为mysql to_date(25-JAN-2020,'DD-MON-YYYY','nls_date_language = FRENCH'). 在mysql中,我们可以通过改变会话来改变nls_date_语言,但是我们可以像上面在mysql中使用oracle那样单独使用datetime来代替改变会话。事实上,这比你想象的更值得 在MySQL中,Oracle的to_date()等价于str_to_date(),而nls_date_语言对应于系统变量 然而,正如(
to_date(25-JAN-2020,'DD-MON-YYYY','nls_date_language = FRENCH').
在mysql中,我们可以通过改变会话来改变nls_date_语言,但是我们可以像上面在mysql中使用oracle那样单独使用datetime来代替改变会话。事实上,这比你想象的更值得 在MySQL中,Oracle的
to_date()
等价于str_to_date()
,而nls_date_语言
对应于系统变量
然而,正如(我的重点是):
此变量影响DATE\u FORMAT()
、DAYNAME()
和MONTHNAME()
函数的输出
lc\u-time\u-names
不影响STR\u-TO\u-DATE()
或GET\u-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中,Oracle的
to_date()
等价于str_to_date()
,而nls_date_语言
对应于系统变量
然而,正如(我的重点是):
此变量影响DATE\u FORMAT()
、DAYNAME()
和MONTHNAME()
函数的输出
lc\u-time\u-names
不影响STR\u-TO\u-DATE()
或GET\u-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 ...