Oracle Number to_char返回非常大数字的哈希符号

时间:2017-01-05 12:05:17

标签: sql oracle oracle11g

我有一个.NET Windows服务,它将SQL Server数据库与Oracle(11g)数据库同步(这是手动完成的,因为第三方Oracle数据库中没有主键,我们无法使用SQL Server复制) 。

我使用每行的MD5哈希检查发布者和订阅者之间的差异,并尝试确保MD5函数的输入具有SQL Server和Oracle数据库的相同格式,以便比较苹果和苹果。因此,对于NUMBER列(在SQL Server表的相应列中是'FLOAT'),我按如下格式化值:

的Oracle

select to_char(13.9, '000000000.00000000000000000000') 
from dual;

SQL Server

select FORMAT(13.9, '000000000.00000000000000000000')

这在大多数情况下都可以正常工作,但在to_char列的值达到10个数字的情况下,似乎是在Oracle NUMBER函数的情况下。 1000000000(而不是999999999)然后to_char输出一串哈希符号:

###############################

这意味着对于某些值,我的MD5函数的输入在Oracle和SQL Server之间不同。

我可以使用to_char来解决此问题吗?

1 个答案:

答案 0 :(得分:3)

您的格式掩码指定九个前导数字。因此,当您传递函数时,您可能不会期望一个###字符串,但是当您传递一个带有十个前导数字的数字时,您应该会出现异常行为:)

最简单的解决方案:使您的格式掩码更大。你允许数字到二十个小数位,这是非常精确的。为什么不那么慷慨与不可分割的一部分?