mysql - 在 MySQL select 语句中,我可以拆分文本列,然后将各部分求和为 float 吗?

标签 mysql select casting split

我有一个定义为文本的 MySQL 列。该列如果不为空,则始终包含一个由换行符分隔的 float 列表。

我的任务是使这些 float 的总量可以在最小和最大约束下进行搜索。

在 where 子句中,我希望能够用换行符拆分列,并将所有结果字符串求和为 float 。

这可能吗?

最佳答案

你可能需要定义自己的函数。这是我刚刚测试的一个例子,希望对你有帮助(顺便说一句:不建议在mysql中实现此类函数。也许最好让应用程序来实现)服务器来计算它而不是 mysql :))。

DELIMITER $$    

CREATE function split_n_sum(str text) returns DECIMAL(36,4) 
begin
declare location int;
declare result decimal(36,4);
declare tmp_str varchar(1024);
declare _delimiter varchar(128);

set _delimiter='\r\n';
set result=0;

set tmp_str=ltrim(rtrim(str)); 

set location=INSTR(tmp_str,_delimiter);
if location=0 and length(tmp_str)>0 then
    set result=cast(tmp_str as decimal(36,4));
    set tmp_str='';
end if;    

while location<>0 do
    set result = result+cast(substring(tmp_str,1,location-length(_delimiter)) as decimal(36,4));
    set tmp_str=substring(tmp_str,location+length(_delimiter), length(tmp_str));
    set location=INSTR(tmp_str,_delimiter); 
end while;

if length(tmp_str)>0 then
    set result=result+cast(tmp_str as decimal(36,4));
end if; 

return result;
end$$

关于mysql - 在 MySQL select 语句中,我可以拆分文本列,然后将各部分求和为 float 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30857185/

相关文章:

mysql - 外键关系没有意义,有没有更好的方法?

c++ - 为什么要经历 static_cast 的麻烦——将数字转换为 double ?

Java - 可以将对象转换为它不扩展的类吗?

sql - 如何在不更改预先存在的条目的情况下将一组值输入到列中?

mysql - 检查是否从 MySQL 触发器中的 SELECT INTO 设置了变量

mysql - 一张表中的两个 ID 链接回父表。如何显示两个 ID 的名称?

java - 将通用集合转换为函数参数

php - 如何计算 SQL 中每个值的表行数?

php - 从数据库中获取数据的最有效方法

mysql - 疯狂的数据库结构 - 建议