在 MySQL select 语句中,我可以拆分一个文本列,然后将各部分相加为浮点数吗?

In a MySQL select statement, can I split a text column and then sum the parts as floats?

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

我的任务是让这些浮点数的总量可以在最小和最大限制条件下进行搜索。

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

这可能吗?

是的,你可以:使用函数:

CREATE FUNCTION splitAndSum(inputStr VARCHAR) 
RETURNS FLOAT;
BEGIN
DECLARE summedValues FLOAT;
DECLARE tempVal FLOAT;
DECLARE subString VARCHAR(200);
DECLARE tempLength INT;

SET subString=inputStr;
SET tempLength=0;
WHILE(TRUE) DO;
SET splitStr=MID(0,instr(subString," "));
SET tempLength=length(subString);
SET subString=MID(instr(subString," "));
SET tempVal=CAST(splitStr AS FLOAT);
SET tempVal=CAST(splitStr AS FLOAT);
SET summedValues=summedValues+tempVal;
IF(length(subString)==tempLength) break;
DONE;
RETURN summedValues;
END;

调用函数:

SELECT splitAndSum("1 2 3");

应该return:6 功能有待测试...

您可能需要自己定义 function.Here 是我刚刚测试的示例,希望对您有所帮助(顺便说一句:不建议在 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$$