0

我有一张test_table如下表

test_id varchar2(10)
new_test_id number

虽然 test_id 是varchar存储的数字,但现在我想将 test_id 中当前值的负数存储到 new_test_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无法将字符串转换为数字?在这种情况下有什么替代方案?updateselect

4

4 回答 4

1

我只是发现它不起作用,因为 test_id 列意外地有几条带有字母的记录。To_number 仅对那些正在更新的记录失败,而对于其他有数字的记录则很好。

于 2013-09-17T13:24:40.070 回答
1

update test_table a set a.new_test_id = -1 * TO_NUMBER(a.test_id);

于 2013-09-17T11:26:45.153 回答
1

尝试将减号放在to_number():

update test_table a set a.new_test_id = - TO_NUMBER(a.test_id);
于 2013-09-17T11:26:55.020 回答
0
update test_table a 
set a.new_test_id = 0 - TO_NUMBER(test_id) 
于 2013-09-17T11:26:38.693 回答