sql - varchar 到数字的转换

标签 sql oracle select insert

我有一个困扰我的问题。当 varchar 值由字母组成时,如何将 varchar 转换为数字。

对于我的 varchar price 列值:

14dollars10cents
15dollars20cents

通过将其转换为 varchar 到数字价格列,值应为:
1410
1520

我知道如果 varchar 不包含任何字母,它可以通过“自动转换”
SELECT CONVERT(INT, PRICE) FROM Table

有什么办法可以去掉中间的字母,因为我想对它做数学函数。

更新将定点数放入的尝试:
SELECT CAST (Replace(REPLACE(PRICE, 'dollars', '.'),'cents','') AS Number(4,2))) 
FROM TEST;

谢谢

最佳答案

您可以使用 REGEXP_REPLACE删除所有非数字字符:

SELECT REGEXP_REPLACE(price, '[^[:digit:]]')
  FROM table;

然后将其转换为数字:
SELECT TO_NUMBER(REGEXP_REPLACE(price, '[^[:digit:]]'))
  FROM table;

如果你想添加点,那么你可以用 REGEXP_REPLACE 来做到这一点。也:
SELECT TO_NUMBER(REGEXP_REPLACE(val, '^([0-9]*)([^[:digit:]]*)([0-9]*)(.*)$', '\1.\3'))
  FROM table;

瞧...

关于sql - varchar 到数字的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8178727/

相关文章:

IN 子句中的 SQL 多列

c# - 用dapper查询oracle的集合参数

mysql - 使用 WHERE 语句为每个 ID 选择一行

php - 选择查询不起作用

java - 如何将oracle转换为JOOQ?

SQL 从右侧选择最后一个数字

mysql - 如何转换使用 MySQL Workbench 创建的 SQL 语句,使其与 Oracle 兼容

sql - PostgreSQL:如何优化这个查询

sql - 如何为所有表选择表名称、行数和 CHECKSUM_AGG?

php - 通过 php/mysql 从表中读取变量