我的表中有一个varchar
字段,其中包含一个日期,格式为:Dic 31 1999 12:00AM
,通常可以使用to_date
配置'Mon DD YYYY HH:MIAM'
进行转换而不会出现任何问题。
月份名称当然可以用任何语言。例如,一月将Jan
英语,Ene
西班牙语。
我认为 Oracle 客户端会选择机器的区域设置来计算传入字符串的语言。唯一的问题是,如果您是无法真正知道日期来自何处的服务器,这将并不总是有效。
我目前的问题是,每次我在西班牙语计算机中并尝试处理英语名为月份的日期时,我都会收到"无效月份"错误。
我有没有办法在执行时间告诉 Oracle,我要发送的语言是什么?
当前丑陋的解决方法是将不匹配的月份翻译成西班牙语。
你应该为此使用 NLS_DATE_LANGUAGE:
select to_char(sysdate, 'dd Month, Day', 'NLS_DATE_LANGUAGE = turkish') from dual
SELECT * FROM NLS_SESSION_PARAMETERS
来确定当前的语言设置(也NLS_INSTANCE_PARAMETERS
和NLS_DATABASE_PARAMETERS
存在)。
使用工作站上的NLS_*
环境变量或 SQL 会话中的ALTER SESSION
语句来更改这些语言设置。
ALTER SESSION可能会起作用。我不记得具体是怎么做的,但我知道你可以用它设置区域设置、日期样式和数字格式。