首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >修改VARCHAR2列数据

修改VARCHAR2列数据
EN

Stack Overflow用户
提问于 2011-03-25 22:52:58
回答 6查看 865关注 0票数 2

我正在开发一个应用程序,其中包括对车辆所做的修改进行评估,并从存储在Oracle 10g数据库中的数字中进行一些数字处理。不幸的是,我在数据库中只有一个文本数据,但是我需要处理数字而不是文本。我想知道是否有人可以帮助我理解如何使用PLSQL对Oracle10g数据库中的VARCHAR2列数据执行字符串操作:

例如:我需要在一个名为CARS的表中获取一个名为VARCHAR2的TOP_SPEED列,解析其列中的文本数据,将其分解为两个新值,并将这些新值插入CARS表中的两个新的数字类型列中,即TOP_SPEED_KMH和TOP_SPEED_MPH。

TOP_SPEED列中的数据如下:例如。"153公里/小时(94.62英里)“

我希望将值153.00保存到TOP_SPEED_KMH列中,将94.62值保存到TOP_SPEED_MPH列中。

我想我在查询/脚本中要做的是:

variable

  • modify
  1. 将TOP_SPEED中的文本数据选择为本地文本
  2. 局部变量,并将新值保存到两个数字
  3. 中,将两个数字变量返回到相应的TOP_SPEED_KMH和TOP_SPEED_MPH列

有人能确认一下我在正确的轨道上吗?如果有人有时间的话,我也会非常感谢任何示例代码。

干杯

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2011-03-28 21:50:04

我认为这是一个更好的主意,只是拥有top_speed_kmh列,并摆脱了英里一。由于一英里内的公里数从未改变,你只需乘以0.6就可以转换为英里。因此,您可以执行N West建议的相同的更新语句,而不使用mph列: update CARS SET TOP_SPEED_KMH = TO_NUMBER(SUBSTR(1,(INSTR(KM(TOP_SPEED),"KM/H") -1));

当你需要每小时的速度,只要选择top_speed_kmh*0.6作为top_speed_mph从汽车;

票数 1
EN

Stack Overflow用户

发布于 2011-03-25 23:57:33

对于解析位,您可能会在SUBSTR中使用REGEXP_SUBSTR或INSTR。

然后使用TO_NUMBER将数字转换为数字

您可以为每个解析创建一个PL/SQL函数,返回number值,并在字段上运行一个UPDATE查询,也可以创建一个PL/SQL过程,其中游标遍历要更新的所有数据。

这里有一些内置的链接:

http://psoug.org/reference/substr_instr.html http://download.oracle.com/docs/cd/B14117_01/server.101/b10759/functions116.htm

票数 1
EN

Stack Overflow用户

发布于 2011-03-28 20:08:44

您甚至可能根本不需要使用PL/SQL来完成这个任务。

只要列中的数据是一致的"99.99 km/h (99.99 m/h)“,您就可以直接使用SQL执行此操作:

代码语言:javascript
复制
UPDATE CARS
SET TOP_SPEED_KMH = TO_NUMBER(SUBSTR(1, (INSTR(UPPER(TOP_SPEED), "KM/H") - 1))),
    TOP_SPEED_MPH = <similar substr/instr combination to pull the 99.99 mph out of code>;

Set-操作通常比过程操作快得多。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5438942

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档