sql - 如何使用 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 将该数据放入一个新表中。
我需要这个来循环很多记录。
解决方案
其他人已经向您展示了如何处理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')
推荐阅读
- node.js - 如何修复 TypeError:无法读取 null 的属性“客户”
- typescript - 打字稿:迭代模块导出的标识符并根据一些规则验证它们
- sql - 此查询的 Postgresql 索引?
- javascript - 大数上的 toFixed 函数
- javascript - 如何在 Webpack 中缩小文件?
- python-3.x - Python3 的 try/except 在使用 requests 库时不起作用
- ios - Xcode 中新视图控制器的可扩展表格菜单
- reactjs - 如何使 React 忽略某些文件夹文件更新并且不重新编译?
- javascript - 如何使用实时数据库在firebase中使用多个选项卡
- c++ - QTreeWidget 从线程项填充扩展