Oracle 如何通过Toad更改日期格式的默认NLS参数?
我有一个NLS日期格式为DD-MON-RR。这使我的基本日期格式为YY,而我想将其更改为YYYY。我尝试使用以下查询,结果它成功运行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服务器导出交叉表时,它查看
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设置,不是吗