首页 > 解决方案 > 如何使用 PLSQL 将 VARCHAR2 更改为 NUMBER 数据类型

问题描述

我正在尝试使用 Toad for Oracle 将一堆数据从 MS Access 移动到 Oracle DB。我有来自 Access 的具有此类数据的字段:

ID TRANS_AMT AMT

1 ($100.00) ($20.00)

2 ($30.00) ($15.00)

3 $45.00 ($10.00)

4 $10.00 $50.00

Access 中的源表将 TRANS_AMT 和 AMT 的数据类型设置为货币。当我为 Oracle 创建表作为目标表时,由于括号,我被迫将数据类型更改为 VARCHAR2。

我需要的是一个过程或函数,它将删除括号,如果括号确实存在,则将结果值乘以 -1,然后根据 ID 将该数据放入一个新表中。

我需要这个来循环很多记录。

标签: sqloracle

解决方案


其他人已经向您展示了如何处理SELECT数据。要INSERT进入您的新表,您将使用

INSERT INTO YOUR_NEW_TABLE (ID, TRANS_AMT, AMT)
  SELECT o.ID,
         TO_NUMBER(TRANSLATE(o.TRANS_AMT, '($)', '-'), '999,999.00'),
         TO_NUMBER(TRANSLATE(o.AMT, '($)', '-'), '999,999.00')
    FROM OLD_TABLE o

无需循环 - 这将一次性完成。

或者 - 您可以直接将数字字段添加到现有表中

ALTER TABLE OLD_TABLE
  ADD (NEW_TRANS_AMT  NUMBER,
       NEW_AMT        NUMBER)

然后将所需的值设置到新字段中

UPDATE OLD_TABLE
  SET NEW_TRANS_AMT = TO_NUMBER(TRANSLATE(TRANS_AMT, '($)', '-'), '999,999.00'),
      NEW_AMT = TO_NUMBER(TRANSLATE(AMT, '($)', '-'), '999,999.00')

dbfiddle在这里


推荐阅读