Oracle SQL:无法将数字转换为字符
我有一个表Oracle SQL:无法将数字转换为字符,oracle,oracle11g,number-formatting,to-char,Oracle,Oracle11g,Number Formatting,To Char,我有一个表SOME_table,其中有一个字段SOME_NUMBER,类型为NUMBER。如果我试图将此字段转换为char,在某些情况下会出现错误 这个选择 select id, SOME_NUMBER, to_char(SOME_NUMBER,'fm999999990D999999999999','nls_numeric_characters=''.,''') tochar, dump(SOME_NUMBER) from SOME_TABLE
SOME_table
,其中有一个字段SOME_NUMBER
,类型为NUMBER。如果我试图将此字段转换为char,在某些情况下会出现错误
这个选择
select id,
SOME_NUMBER,
to_char(SOME_NUMBER,'fm999999990D999999999999','nls_numeric_characters=''.,''') tochar,
dump(SOME_NUMBER)
from SOME_TABLE
where id in (
19876,
19886,
19857,
19792,
19810
);
将导致
+-------+---------------+-------------------------+----------------------------+
| ID | SOME_NUMBER | TOCHAR | DUMP(SOME_NUMBER) |
+-------+---------------+-------------------------+----------------------------+
| 19792 | 0,00000013147 | 0.00000013147 | Typ=2 Len=4: 189,14,15,71 |
| 19810 | 0,0000001387 | ####################### | Typ=2 Len=3: 189,15,244 |
| 19857 | 0,00000011896 | ####################### | Typ=2 Len=4: 189,13,246,61 |
| 19876 | 0,00000012962 | 0.00000012962 | Typ=2 Len=4: 189,13,97,21 |
| 19886 | 0,00000011896 | ####################### | Typ=2 Len=4: 189,13,246,61 |
+-------+---------------+-------------------------+----------------------------+
此外,我注意到错误示例的内部表示与我通过“直接”选择得到的表示不同:
返回
+--------------+-------------------------+
| 0.0000001387 | DUMP |
+--------------+-------------------------+
| 0,0000001387 | Typ=2 Len=3: 189,14,88 |
| 0,0000001387 | Typ=2 Len=3: 189,15,244 |
+--------------+-------------------------+
对于给我错误的记录,这是正确的,所以这一定与问题有关
这是Oracle管理数字字段的错误吗?或者这是一种可接受/正确/可能的情况?我怎样才能解决这个问题?如果我尝试
到\u char
没有任何格式字符串的字段,则连接会下降。。。这不可能是正常的。这是已知问题吗?很遗憾,您的数据已损坏。如果您不知道它是如何或为什么损坏的,您就不能真正信任它-您不知道原始数字是0.0000001387还是完全不同的数字。你知道这些数据是如何加载的吗?您可以通过OCI调用获得损坏,并且imp
有时用于导致此类事件,让Oracle支持参与进来的建议可能也适用于此。可能重复。明天早上我将检查数据的加载方式,这是一个复杂的过程。但这种差异是否意味着我的数据确实被破坏了?我可以这么说,是的。如果您能够准确地找出它被破坏的位置和方式(即加载过程中的特定错误),那么您可以找出原始值并进行更正,但这似乎是一个很长的过程。请记住,即使是转换的值实际上也可能不正确——它们可能只是损坏了一个内部值,即一个实数;或者你可以有一些坏的和一些好的。真的没有办法告诉你。很抱歉祝你好运…确保endian格式相同。请参阅。
+--------------+-------------------------+
| 0.0000001387 | DUMP |
+--------------+-------------------------+
| 0,0000001387 | Typ=2 Len=3: 189,14,88 |
| 0,0000001387 | Typ=2 Len=3: 189,15,244 |
+--------------+-------------------------+