gpt4 book ai didi

mysql - 使用 MySQL 从字符串返回 float

转载 作者:行者123 更新时间:2023-11-29 04:24:38 25 4
gpt4 key购买 nike

例如,如果我有一个名为 mutable 的表,其中包含这种数据:

id size1  100ml2  30ml3  6,7g4  8,8kg5  alfa 110v6  beta 220v

如何提取字符串的数字并将其转换为 float 。 (在这种情况下,, 将小数部分与整数部分分开。

那么,我怎样才能执行一个查询来返回这样的东西呢?:

id size       finalSize3  6,7g       6,74  8,8kg      8,82  30ml       301  100ml      1005  alfa 110v  1106  beta 220v  220

还有这个? (只是 id`s):

id342156

P.S.:我需要用 MySQL 函数来做这件事......

附言:2我已经尝试使用 MySQL 搜索匹配正则表达式,但看起来没有返回匹配模式的函数。也许如果我创建一个函数来替换不是数字或 的所有内容, 可以解决我的问题,但我找不到解决这个问题的方法。 MYSQL REPLACE 函数不使用正则表达式。

最佳答案

这是一个基于函数的解决方案:The function was readily available in one of thes posts.所以我只更改了在列表中添加一个逗号,因为它运行良好:)

查询:

select id, size,
replace(STRIP_NON_DIGIT(size),',','.')
as final
from demo
;

功能:

CREATE FUNCTION STRIP_NON_DIGIT(input VARCHAR(255))
RETURNS VARCHAR(255)
BEGIN
DECLARE output VARCHAR(255) DEFAULT '';
DECLARE iterator INT DEFAULT 1;
WHILE iterator < (LENGTH(input) + 1) DO
IF SUBSTRING(input, iterator, 1) IN (',', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' ) THEN
SET output = CONCAT(output, SUBSTRING(input, iterator, 1));
END IF;
SET iterator = iterator + 1;
END WHILE;
RETURN output;
END//

结果:

| ID |      SIZE | FINAL |
--------------------------
| 3 | 6,7g | 6.7 |
| 4 | 8,8kg | 8.8 |
| 2 | 30ml | 30 |
| 1 | 100ml | 100 |
| 5 | alfa 110v | 110 |
| 6 | beta 220v | 220 |

正如您自己提到的,MYSQL 没有Oracle 那样的regex_replace。除非您想使用多个 replaces(不想假设有多少),否则函数会派上用场。

关于mysql - 使用 MySQL 从字符串返回 float ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14403313/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com