我有一个小实用函数,可以从给定日期计算星期几:
select to_number(to_char(to_date('20130330', 'YYYYMMDD'),'D')) from dual;
在同一个数据库实例上执行这个语句,但是从两台不同的机器上执行它会产生两个不同的结果!
问题是:如何修改代码以便在两台不同的 PC 但使用相同的数据库实例上获得相同的结果?
细节
当我使用以下 nls_session 参数从我的电脑启动会话时,结果为 6 :
select * from nls_session_parameters;
NLS_LANGUAGE HUNGARIAN
NLS_TERRITORY HUNGARY
NLS_CURRENCY Ft
NLS_ISO_CURRENCY HUNGARY
NLS_NUMERIC_CHARACTERS ,
NLS_CALENDAR GREGORIAN
NLS_DATE_FORMAT RR-MON-DD
NLS_DATE_LANGUAGE HUNGARIAN
NLS_SORT HUNGARIAN
NLS_TIME_FORMAT HH24.MI.SSXFF
NLS_TIMESTAMP_FORMAT RR-MON-DD HH24.MI.SSXFF
NLS_TIME_TZ_FORMAT HH24.MI.SSXFF TZR
NLS_TIMESTAMP_TZ_FORMAT RR-MON-DD HH24.MI.SSXFF TZR
NLS_DUAL_CURRENCY Ft
NLS_COMP BINARY
NLS_LENGTH_SEMANTICS BYTE
NLS_NCHAR_CONV_EXCP FALSE
相同的数据库实例给出不同的结果: 7通过从具有这些会话参数的不同 PC 启动会话:
PARAMETER VALUE
NLS_LANGUAGE AMERICAN
NLS_TERRITORY AMERICA
NLS_CURRENCY $
NLS_ISO_CURRENCY AMERICA
NLS_NUMERIC_CHARACTERS .,
NLS_CALENDAR GREGORIAN
NLS_DATE_FORMAT DD-MON-RR
NLS_DATE_LANGUAGE AMERICAN
NLS_SORT BINARY
NLS_TIME_FORMAT HH.MI.SSXFF AM
NLS_TIMESTAMP_FORMAT DD-MON-RR HH.MI.SSXFF AM
NLS_TIME_TZ_FORMAT HH.MI.SSXFF AM TZR
NLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH.MI.SSXFF AM TZR
NLS_DUAL_CURRENCY $
NLS_COMP BINARY
NLS_LENGTH_SEMANTICS BYTE
NLS_NCHAR_CONV_EXCP FALSE
对我来说,正确的结果是 7,但它必须在我的 PC 上提供。我尝试了以下但没有成功:
- 将 NLS_LANGUAGE 更改为 AMERICAN
- 用于带有可选 nls_language 参数的 to_char()
有什么建议么?