Oracle"无效数字"由to_char函数引起的

时间:2015-07-11 11:47:47

标签: sql-server oracle to-char

我有以下SQL查询在表中查找重复值(两个值为null的值必须被归类为重复,因此使用nvl):

select * from PersonLinkTable personLink
where personLink.RefPerson = 100
and nvl(to_char(personLink.PersonLinkType), '###') = nvl(to_char(PersonLinkTable.PersonLinkType), '###')  // Repeats for required columns

第三行重复所需的列,并在将来添加任何新列时自动生成。问题是,当我添加to_char时,这已经过测试并导致了一个"无效数字" Oracle错误。我相信,如果将来添加任何日期列,则需要使用to_char。

为什么以这种方式使用to_char会导致"无效数字"错误,使用它的正确方法是什么?目前的列类型是varchar2,char和number。

此查询在SQL Server上正常工作,但有一些更改 - 没有to_char,isnull而不是nvl,并且空值更改为空字符串而不是' ###'。这是一个较大的查询的一部分,并且有#34;并且不存在"在它周围。

1 个答案:

答案 0 :(得分:1)

To_Char默认接收一个数字作为其参数。如果它收到一个字符串,那么它会尝试将字符串隐含地转换为数字,如果无法转换该字符串,则会引发此错误消息。

如果列是字符类型,请不要尝试将其转换为字符串。