To_number无法将varchar转换为update语句中的数字

时间:2013-09-17 11:25:07

标签: sql oracle

我有一张表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无法在update语句中将字符串转换为数字,因为它在select中正常工作?在这种情况下,替代方案是什么?

4 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

我只是发现它无法正常工作,因为test_id列意外地有几个带字母的记录。 To_number只对那些正在更新的记录失败,对于有数字的其他记录来说没有问题。

答案 3 :(得分:0)

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