Sql 在update语句中将varchar转换为number失败

Sql 在update语句中将varchar转换为number失败,sql,oracle,Sql,Oracle,我有一个表格test\u table,如下所示 test_id varchar2(10) new_test_id number 虽然test\u id是varchar它存储了数字,但现在我想将test\u id中当前值的负数存储到new\u test\u id。我尝试的语句如下: update test_table a set a.new_test_id = TO_NUMBER(-a.test_id); 这会抛出无效数字错误,尽管在运行测试查询时 select TO_NUMBER(-test

我有一个表格
test\u table
,如下所示

test_id varchar2(10)
new_test_id number
虽然test\u id是
varchar
它存储了数字,但现在我想将test\u id中当前值的负数存储到new\u test\u id。我尝试的语句如下:

update test_table a set a.new_test_id = TO_NUMBER(-a.test_id);
这会抛出无效数字错误,尽管在运行测试查询时

select TO_NUMBER(-test_id) from test_table
它显示格式正确的数字结果


为什么
to_number
update
语句中无法将字符串转换为数字,因为它在
select
中工作正常?这种情况下的替代方案是什么?

更新测试表a将a.new\u test\u id=-1*设置为a.test\u id

更新测试表a,将a.新测试id=-1*设置为测试编号(a.测试id)

尝试将减号放在
to_number()之外。

update test_table a 
set a.new_test_id = 0 - TO_NUMBER(test_id) 

尝试将减号放在
to_number()
之外:


我刚刚发现它不起作用,因为test_id列意外地有几个字母记录。To_number仅在更新中的记录中失败,而在其他有数字的记录中没有问题。

我刚刚发现它不起作用,因为test_id列意外地有两个带有字母的记录。To_number仅对更新中的记录失败,对其他有编号的记录没有问题。

这不起作用,因为测试id
未转换为数字。仍然获取错误无效号码。@Baljeet。我想不出代码在
select
中工作,但在
update
中不工作的情况。您能给出一些
test\u id
中的值的例子吗?我也很困惑地看到它在select中工作,而不是在update中。出乎意料的是,有几条记录中有字母,这就是导致失败的原因。@Baljeet。您可以执行类似于
(当REGEXP\u like(a.test\u id,“^[:digit:]+$”)的操作,然后-TO\u NUMBER(a.test\u id)end)
这不起作用,因为
a.test\u id
未转换为数字。仍然获取错误无效号码。@Baljeet。我想不出代码在
select
中工作,但在
update
中不工作的情况。您能给出一些
test\u id
中的值的例子吗?我也很困惑地看到它在select中工作,而不是在update中。出乎意料的是,有几条记录中有字母,这就是导致失败的原因。@Baljeet。您可以执行类似于
(当REGEXP_喜欢(a.test_id,“^[:digit:][]+$”)的操作,然后执行-TO_NUMBER(a.test_id)end)
update test_table a set a.new_test_id = - TO_NUMBER(a.test_id);