我正在开发一个应用程序,其中包括对车辆所做的修改进行评估,并从存储在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
。
有人能确认一下我在正确的轨道上吗?如果有人有时间的话,我也会非常感谢任何示例代码。
干杯
发布于 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从汽车;
发布于 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
发布于 2011-03-28 20:08:44
您甚至可能根本不需要使用PL/SQL来完成这个任务。
只要列中的数据是一致的"99.99 km/h (99.99 m/h)“,您就可以直接使用SQL执行此操作:
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-操作通常比过程操作快得多。
https://stackoverflow.com/questions/5438942
复制相似问题