在ODI列映射中使用to_date功能时,日期值和数据库NLS里设置的值不一样_Tomcat, WebLogic及J2EE讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  Tomcat, WebLogic及J2EE讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 4474 | 回复: 0   主题: 在ODI列映射中使用to_date功能时,日期值和数据库NLS里设置的值不一样        下一篇 
yanghui
注册用户
等级:上尉
经验:584
发帖:92
精华:0
注册:2011-12-13
状态:离线
发送短消息息给yanghui 加好友    发送短消息息给yanghui 发消息
发表于: IP:您无权察看 2011-12-23 16:29:32 | [全部帖] [楼主帖] 楼主

在ODI列映射中使用to_date功能时,日期值和数据库NLS里设置的值不一样

应用:

Oracle Data Integrator - 版本: 3.2.03.01 及以后发行的版本

本文档的信息可以应用到任何平台

现象

在运行ODI集合接口或者指定程序时,在同一个数据库不同客户端中使用下面的SQL指令,获得两种不同的结果:

select to_char(to_date('28082004','DDMMYYYY'),'D') from dual;


在第一种情况下,结果是7,而第二种情况的结果是6.到底哪出错了呢?

原因

因为数据转换功能是依赖于数据库NLS的参数(NLS_LANG, NLS_LANGUAGE, NLS_TERRITORY ...), 检查数据库和会话NLS的参数:

select * from v$nls_parameters;


解决方案

使用to_date功能的 'D', 'DAY' 或者 'DY'的函数格式,将会返回一个依赖于NLS_LANGUAGE 和 NLS_TERRITORY设置的值

例如:

如果NLS_TERRITORY 设置为 "AMERICA",问题描述中请求就会返回7;

如果NLS_TERRITORY 设置为 "FRANCE",,相同的请求就会返回6;

使用下面的SQL指令来修改NLS_TERRITORY oracle会话设置:

alter session set NLS_TERRITORY='FRANCE';


为了更准确,在执行SQL指令之前,设置NLS参数




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论