【问题标题】:Conversion of varchar to number将 varchar 转换为数字
【发布时间】:2011-12-31 23:58:36
【问题描述】:

我有一个困扰我的问题。当 varchar 值由字母组成时,如何将 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;

谢谢

【问题讨论】:

  • 位置是固定的吗?然后子字符串操作将起作用。否则,使用正则表达式删除所有非数字。
  • 您好,职位不固定。 dinup 提供的解决方案不能作为 formatfixedpoint 仅适用于某些字符串。
  • 使用 REGEXP_REPLACE,您可以在一条 SQL 语句中完成所需的一切。我会留下一个答案来说明如何。

标签: sql oracle select insert


【解决方案1】:

您可以使用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') 作为数字时
    • 我已经更新了我已经完成的当前解决方案。是否可以区分 3 个值?因为我的表数据由空值组成
    • ...您尝试将 'dollars' 更改为 'cents' 首先您需要将 'dollars' 更改为 '' try SELECT CAST(REPLACE(REPLACE(YourVarcharCol, 'dollars', '' ), 'cents', '') AS INT) FROM Table
    • 明白。只是另一个问题。如果我想将其更改为定点数 Number(4,2)。更换后可以吗?
    • 好吧,您可以尝试使用任何您想要的类型...我还没有实际测试过这些,所以我不确定:)
    【解决方案3】:

    如何使用translate 去除不需要的字符。

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

      猜你喜欢
      • 2013-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-19
      • 2011-02-01
      • 2020-10-26
      相关资源
      最近更新 更多