2011-05-24 150 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