Oracle Query字符串到数字转换问题

时间:2014-07-15 13:59:52

标签: sql oracle oracle11g

我有一个包含3列的表

emp_id  number
fname  string
pnumber string

在某些情况下,emp_id和pnumber是相同的。我正在尝试使用

查询表
select * from emp where emp_id = pnumber

这是一个错误;数字无效

如何解决此问题?

1 个答案:

答案 0 :(得分:4)

这种情况正在发生,因为并非pnumber列中的所有数据都是NUMBER。 Oracle正在隐式地将此列转换为数字以执行比较。

您需要使用TO_CHAR() 显式emp_id列转换为字符串:

select * from emp where to_char(emp_id) = pnumber

更一般地说,never rely on implicit conversion;总是明确地做所有事情,以便数据库知道你想要做什么。引用:

  

Oracle建议您指定显式转换,而不是依赖隐式或自动转换,原因如下:

     
      
  • 使用显式数据类型转换函数时,SQL语句更容易理解。

  •   
  • 隐式数据类型转换可能会对性能产生负面影响,尤其是当列值的数据类型转换为常量的数据类型而不是相反时。

  •   
  • 隐式转换取决于它发生的上下文,并且在每种情况下可能无法以相同的方式工作。例如,从datetime值到VARCHAR2值的隐式转换可能会返回意外的年份,具体取决于NLS_DATE_FORMAT的值   参数。

  •   
  • 隐式转换的算法可能会在软件版本和Oracle产品之间发生变化。显式转换的行为更具可预测性。

  •