我有一张表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
中正常工作?在这种情况下,替代方案是什么?
答案 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)