Oracle 如何通过Toad更改日期格式的默认NLS参数?

Oracle 如何通过Toad更改日期格式的默认NLS参数?,oracle,tableau-api,date-formatting,Oracle,Tableau Api,Date Formatting,我有一个NLS日期格式为DD-MON-RR。这使我的基本日期格式为YY,而我想将其更改为YYYY。我尝试使用以下查询,结果它成功运行 DECLARE v_date DATE := sysdate; BEGIN DBMS_OUTPUT.put_line(TO_CHAR(v_date, 'MM/DD/YYYY')); END; 但这并没有改变默认格式 在某些情况下,我试图将数据从Oracle导入Tableau。不幸的是,当我试图从Tableau服务器导出交叉表时,它查看

我有一个NLS日期格式为DD-MON-RR。这使我的基本日期格式为YY,而我想将其更改为YYYY。我尝试使用以下查询,结果它成功运行

DECLARE
       v_date DATE := sysdate;
BEGIN
       DBMS_OUTPUT.put_line(TO_CHAR(v_date, 'MM/DD/YYYY'));
END;
但这并没有改变默认格式

在某些情况下,我试图将数据从Oracle导入Tableau。不幸的是,当我试图从Tableau服务器导出交叉表时,它查看的是底层数据,而不是视图上的内容。这会导致我在excel中将2017年6月25日的日期更改为2017年6月25日

我所能理解的唯一解决方法是更改底层/源数据的默认格式,在本例中是Oracle DB

我正在使用TOAD,并试图了解如何将其更改为DD/MON/RRRR格式或类似的格式,年份列中有4位数字


任何解决方法都可以在应用程序中以编程方式更改会话集nls\U date\U format='DD/MON/RRRR',或者

CREATE OR REPLACE TRIGGER trg_after_logon AFTER LOGON ON DATABASE
BEGIN
   execute immediate 'alter session set NLS_DATE_FORMAT=''DD/MON/RRRR''';
END;
在系统或系统架构中

或者,您可以使用

alter system set NLS_DATE_FORMAT='DD/MON/RRRR' scope = both

如果您在system或sys中,请再次使用。

在应用程序中以编程方式更改会话设置nls\u date\u format='DD/MON/rrrrr'

CREATE OR REPLACE TRIGGER trg_after_logon AFTER LOGON ON DATABASE
BEGIN
   execute immediate 'alter session set NLS_DATE_FORMAT=''DD/MON/RRRR''';
END;
在系统或系统架构中

或者,您可以使用

alter system set NLS_DATE_FORMAT='DD/MON/RRRR' scope = both

如果您在system或sys中,请再次使用。

使用最合理的方法管理日期格式屏蔽

首先,我同意Alex关于使用
来显示字符的看法。这将是我修改日期掩码以满足特定需求的第一选择

在Toad中,您可以根据需要调用alter session命令:

ALTER SESSION SET nls_date_format='DD/MON/rrrrrr'

如果您偏向于特定的日期格式掩码(并且您经常看到您自己发出命令,<代码> ALTER会话集NLS…<代码>),那么您可能需要考虑更改您的用户登录设置。p> 如果您只是修改特定的用户首选项登录文件login.sql(请参阅),您的会话将遵循您在会话开始时选择的日期格式掩码。我倾向于创建环境变量SQLPATH,并将登录脚本放在那里

Toad将尊重您的login.sql文件设置(例如,请参见此)


由于这是由特定的要求或个人偏好驱动的,因此我决不会考虑在站点级别从默认设置修改此设置。

使用最合理的方法管理日期格式屏蔽。

首先,我同意Alex关于使用
来显示字符的看法。这将是我修改日期掩码以满足特定需求的第一选择

在Toad中,您可以根据需要调用alter session命令:

ALTER SESSION SET nls_date_format='DD/MON/rrrrrr'

如果您偏向于特定的日期格式掩码(并且您经常看到您自己发出命令,<代码> ALTER会话集NLS…<代码>),那么您可能需要考虑更改您的用户登录设置。p> 如果您只是修改特定的用户首选项登录文件login.sql(请参阅),您的会话将遵循您在会话开始时选择的日期格式掩码。我倾向于创建环境变量SQLPATH,并将登录脚本放在那里

Toad将尊重您的login.sql文件设置(例如,请参见此)


由于这是由特定的要求或个人偏好驱动的,我决不会考虑在站点级别从默认值修改此设置。

正如其他答案中已经给出的那样,您可以通过
更改会话设置
NLS\u日期\u格式

要仅为本地PC设置它,请打开注册表编辑器,然后分别导航到
HKLM\SOFTWARE\Wow6432Node\ORACLE\KEY\u%ORACLE\u HOME\u NAME%
HKLM\SOFTWARE\ORACLE\KEY\u%ORACLE\u HOME\u NAME%

您可以在其中添加字符串值
NLS\u DATE\u FORMAT
,例如:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraClient11g_home1]
"NLS_TIMESTAMP_FORMAT"="YYYY-MM-DD HH24:MI:SSfmXFF3"
"NLS_TIMESTAMP_TZ_FORMAT"="YYYY-MM-DD HH24:MI:SSfmXFF3 fmTZH:TZM"
"NLS_DATE_FORMAT"="YYYY-MM-DD HH24:MI:SS"

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ORACLE\KEY_OraClient11g_home1]
"NLS_TIMESTAMP_FORMAT"="YYYY-MM-DD HH24:MI:SSfmXFF3"
"NLS_TIMESTAMP_TZ_FORMAT"="YYYY-MM-DD HH24:MI:SSfmXFF3 fmTZH:TZM"
"NLS_DATE_FORMAT"="YYYY-MM-DD HH24:MI:SS"

您可以在Windows设置中将
NLS\u日期\u格式设置为环境变量。

如其他答案中所述,您可以通过
ALTER SESSION
设置
NLS\u日期\u格式

要仅为本地PC设置它,请打开注册表编辑器,然后分别导航到
HKLM\SOFTWARE\Wow6432Node\ORACLE\KEY\u%ORACLE\u HOME\u NAME%
HKLM\SOFTWARE\ORACLE\KEY\u%ORACLE\u HOME\u NAME%

您可以在其中添加字符串值
NLS\u DATE\u FORMAT
,例如:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraClient11g_home1]
"NLS_TIMESTAMP_FORMAT"="YYYY-MM-DD HH24:MI:SSfmXFF3"
"NLS_TIMESTAMP_TZ_FORMAT"="YYYY-MM-DD HH24:MI:SSfmXFF3 fmTZH:TZM"
"NLS_DATE_FORMAT"="YYYY-MM-DD HH24:MI:SS"

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ORACLE\KEY_OraClient11g_home1]
"NLS_TIMESTAMP_FORMAT"="YYYY-MM-DD HH24:MI:SSfmXFF3"
"NLS_TIMESTAMP_TZ_FORMAT"="YYYY-MM-DD HH24:MI:SSfmXFF3 fmTZH:TZM"
"NLS_DATE_FORMAT"="YYYY-MM-DD HH24:MI:SS"

您可以在Windows设置中将
NLS\u DATE\u格式设置为环境变量。

是否
alter session
不起作用?我想蟾蜍在其偏好中有自己的默认值,但没有一个副本来找出确切的位置。并不是说你真的应该依赖NLS设置,难道你不能用一个显式的格式掩码使用
to_char()
?(另外,Tableau是否必须将值作为字符串-它看不到原始日期吗?不确定这里的“基础数据”是什么意思)嗨,Alex,谢谢你的评论。我尝试使用to_date后跟to_char(因为该字段已经是日期格式)。但不幸的是,这不起作用。我尝试使用alter session nls_date_format='DD/MON/RRRR',但它抛出了一个错误。至于tableau,它将其视为日期而不是字符串,问题是它确实以原始NLS格式查看原始日期。这就是为什么下载DD/MON/RR而不是DD/MON/RRRR时它会给出日期格式。我希望这能澄清问题date没有任何固有的格式。做
到日期(到字符(…)
对你没有帮助。您需要看看Tableau是如何根据您所说的内容格式化它返回的日期的。
alter session
不起作用吗?我想蟾蜍在其偏好中有自己的默认值,但没有一个副本来找出确切的位置。并不是说你真的应该依赖NLS设置,不是吗