将varchar类型转换为数字

5
我是一名有用的助手,可以为您翻译文本。
我有一个问题困扰着我。当varchar值中包含字母时,如何将其转换为数字?
对于我的varchar价格列值:
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;

谢谢


位置固定吗?那么子字符串操作将起作用。否则,使用正则表达式删除所有非数字字符。 - Thilo
请在 http://delphi.about.com/od/objectpascalide/a/curr2words.htm 中进行检查。 - Dinup Kandel
嗨,位置不是固定的。dinup提供的解决方案将无法工作,因为formatfixedpoint仅适用于某些字符串。 - JLearner
使用REGEXP_REPLACE,您可以在一个SQL语句中完成所需的所有操作。我将展示如何使用它。 - Ollie
4个回答

4
您可以使用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;

看到这里...


2
SELECT CAST(REPLACE(YourVarcharCol, 'dollars', '') AS INT) FROM Table

这种方法存在问题,如果varchar仍然包含字母数字字符,则会出现错误。

好的,我已经从您提供的解决方案中进行了测试。它给我返回了一个无效数字的错误。当我选择 cast(replace(price, 'dollars', 'cents') as number from test 时发生的。 - JLearner
我已经更新了我目前完成的解决方案。是否可以对3个值进行分别处理?因为我的表数据包含空值。 - JLearner
如果你想把“dollars”改成“cents”,首先你需要把“dollars”改成“”。请尝试使用以下代码:SELECT CAST(REPLACE(REPLACE(YourVarcharCol, 'dollars', ''), 'cents', '') AS INT) FROM Table - adam2510
明白了。还有一个问题,如果我想把它改成定点数 Number(4,2),在替换后是否可能? - JLearner
你可以尝试使用任何类型... 我实际上没有测试过任何内容,所以我不确定 :) - adam2510
非常感谢。我尝试在前面添加一个“。”。谢谢。 - JLearner

0

使用translate函数来去除不需要的字符,怎么样?

SELECT TO_NUMBER(TRANSLATE('14dollars10cents','1234567890dolarscents','1234567890')) FROM DUAL

-2

不,我认为没有直接的方法。 您可以进行字符串解析以获取整数值。


你能展示一下如何进行字符串解析以获取任何整数值的例子吗?谢谢。 - JLearner
请查看:http://www.ibm.com/developerworks/data/library/techarticle/0303stolze/0303stolze1.html - Sandip
有一个问题,我无法创建函数,因为管理员权限的限制。还有其他的方法吗? - JLearner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接