【问题标题】:sql extract only numeric value from columnsql只从列中提取数值
【发布时间】:2021-10-05 03:51:44
【问题描述】:

我有一个名为'memo_line_2'的列,值格式是:'$ 3000.00(卡限额增加)',我怎样才能从列中只提取数值?谢谢 示例:

'$3000.00 (card limit increase)' -> 3000
'$5000.00 (card limit increase)' -> 5000
'$12000.00 (card limit increase)' ->12000

【问题讨论】:

  • 所以模式总是先是 $ 然后是数字然后是空格 - 所以你想提取美元符号之后和第一个空格之前(美元符号之后)的所有内容?
  • 欢迎您!请编辑您的问题以显示您所做的事情、您遇到的问题等。否则,正如所写的那样,这个问题很不幸离题了。
  • 我的解决方案对您有帮助吗?

标签: mysql sql


【解决方案1】:

您可以为此use REGEXP_SUBSTR()

SELECT REGEXP_SUBSTR(tmp.`value`, '[0-9]+') as `new_value`
  FROM (SELECT '$3000.00' as `value` UNION ALL 
        SELECT '$5000.00' as `value` UNION ALL 
        SELECT '$12000.00' as `value`) tmp 

返回:

new_value
---------
3000
5000
12000

如果您想保留小数点后的所有内容,请使用'[0-9.]+' 作为您的正则表达式过滤器。

【讨论】:

  • 如果该列有 1000+ 不同的行?
  • 我看不出这是我的问题所在。问题是关于字符串操作。该解决方案根据要求操作字符串。如果这个人后来遇到性能问题,因为他们正在转换十亿行,或者更糟糕的是在WHERE 子句中使用REGEXP_SUBSTR(),他们可以问另一个问题??
【解决方案2】:

如果您的数据始终采用这种格式,您可以使用以下查询来选择 $. 之间的数据:

SELECT substring_index(substring_index(memo_line_2, '$', -1), '.', 1)
FROM your_table;

参考:MySQL substring between two strings

【讨论】:

    【解决方案3】:

    你可以使用:

    select regexp_substr(col, '[0-9]+[.]?[0-9]*')
    

    这将提取带有美分的数字。然后您可以转换为整数或数字:

    select cast(regexp_substr(col, '[0-9]+[.]?[0-9]*') as unsigned)
    

    【讨论】:

      【解决方案4】:

      这可以通过在你的 sql 查询中创建一个自定义函数来完成

      看看:

      https://stackoverflow.com/a/37269038/16536522

      【讨论】:

      • 请不要发布仅链接的答案。此外,您正在链接到另一个 Stack Overflow 帖子。这不是一个答案。当您有足够的代表时,您可以将其发布为评论。但还要注意,OP 没有显示任何工作:没有查询,没有输出,没有错误。 OP 需要提供这个最低限度的信息。否则,只是请求别人解决他们的问题。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-04-02
      • 2021-11-21
      • 2020-09-21
      • 2021-07-25
      • 1970-01-01
      • 2023-03-06
      • 1970-01-01
      相关资源
      最近更新 更多