这个Oracle to_number函数不应该工作吗?

时间:2015-05-07 08:33:03

标签: sql regex oracle oracle11g

我有点迷失在一个应该非常微不足道的问题中。我检查了相关的问题,导致检查正则表达式拟合,他们这样做。我有一个4个字符长的varchar2,oracle不想将它转换为数字。

我查了一下:

select 
  nyszamtxt 
  from gyta_megjegyzes 
  where REGEXP_LIKE (nyszamtxt, '[0-9][0-9][0-9][0-9]');

它以varchar2形式返回预期的数字,没有别的。

那么这应该可以正常工作我想:

select 
  to_number(nyszamtxt) 
  from gyta_megjegyzes 
  where REGEXP_LIKE (nyszamtxt, '[0-9][0-9][0-9][0-9]');

不,它说ORA 01722. 00000 - “无效号码”

我错过了一些非常微不足道的东西吗?我不知道是什么问题。

1 个答案:

答案 0 :(得分:3)

在一般情况下,Oracle不会像abc1234xyz那样只删除非数字字符。您可能想要执行以下任一操作:

  • 强化你的表情:

    where REGEXP_LIKE (nyszamtxt, '^[0-9][0-9][0-9][0-9]$');
    
  • 自己剥离字符:

    select 
    to_number(REGEXP_REPLACE(nyszamtxt, '[^0-9]+', '')) 
    from gyta_megjegyzes 
    where REGEXP_LIKE (nyszamtxt, '[0-9][0-9][0-9][0-9]');