我有点迷失在一个应该非常微不足道的问题中。我检查了相关的问题,导致检查正则表达式拟合,他们这样做。我有一个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 - “无效号码”
我错过了一些非常微不足道的东西吗?我不知道是什么问题。
答案 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]');