2011-05-24 96 views
2

我想在两个不同数据库的两个数据集之间进行C#数据集比较。数据集一来自Oracle,而数据集二来自SQL Server,我在ETL作业运行后将这些数据集进行比较,以将数据从Oracle移动到SQL Server以验证结果。我遇到的问题是SQL Server中的数据匹配,但日期格式不同于源和目标,还有小数点舍入。Oracle和SQL Server数据集比较

有没有人有一个很好的方法来规避这个问题。我正在考虑改变填充数据集的源表和目标表的查询来格式化日期等......所以比较会更容易,但我想看看有没有其他方法?

+1

http://msdn.microsoft.com/en-us/library/ms151817.aspx – 2011-05-24 03:59:34

+0

感谢米奇,我正在做一个数据集比较数据集,实际上不需要做任何事情与数据集以外的填充它们,然后做一个比较,所以我不想映射它们,除了ETL的验证检查。 – user728584 2011-05-24 04:06:56

回答

1

对于日期格式,将NLS_DATE_FORMAT环境变量设置为所需的格式。这假定你捕获一个字符串中的数据。 Oracle会将日期格式化为您指定的格式。对于小数点四舍五入,我不明白。这些数字应该是一样的。如果您得到一个小数点并且需要逗号,请使用NLS_MUMERIC_CHARACTERS'DG'来选择使用哪个字符来使用小数点或组分隔符。

例如'。,'选择'。'。为小数点和逗号为组分隔符。

可以从客户端OS和Oracle会话中设置环境变量。要做到这一点,问题alter session set nls_date_format = 'YYYYMMDDHH24MISS';或任何格式最适合你。

+0

谢谢队友,我从一个Windows Box连接到Oracle,然后在这台机器上用两个数据源为Oracle和SQL Server做C#比较。我可以在Windows机器上设置NLS_DATE_FORMAT环境变量还是特定于Unix?我没有访问物理Oracle机器来更改任何配置? – user728584 2011-05-24 05:48:10

+0

嗨,你也可以在你的客户端做到这一点,没问题。它甚至可以在会话中完成:如果您想这样做,请改变会话集nls_date_format ='yyyymmddhh24miss'。我为此编辑答案。 – 2011-05-24 08:25:41

+0

谢谢队友,我会试试看。干杯 – user728584 2011-05-24 09:06:50