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

Dav*_*wer 1 sql oracle oracle11g

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

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

甲骨文

select to_char(13.9, '000000000.00000000000000000000') 
from dual;
Run Code Online (Sandbox Code Playgroud)

SQL服务器

select FORMAT(13.9, '000000000.00000000000000000000')
Run Code Online (Sandbox Code Playgroud)

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

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

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

我可以做些什么来to_char纠正这个问题吗?

APC*_*APC 5

您的格式掩码指定九个前导数字。因此,虽然您可能不希望看到一个字符串,###但当您向函数传递一个具有十个前导数字的数字时,您应该预料到会出现异常行为:)

最简单的解决方案:增大格式掩码。您允许数字保留到小数点后二十位,这是令人惊讶的精确度。为什么不那么慷慨地对待不可或缺的部分呢?