gpt4 book ai didi

mysql - 将分隔值转换为逗号分隔列表

转载 作者:行者123 更新时间:2023-11-29 03:16:26 25 4
gpt4 key购买 nike

我的 Web 应用程序 (PHP/jQuery/MySQL) 具有使我能够根据特定事件向我的客户发送格式良好的 html 电子邮件通知的功能。该代码运行良好,并将我的数据库中的数据合并到表单字段中,尽管我需要对其进行增强以在某些情况下能够提供丰富/本地化/重新格式化的数据。

例如:- 以用户自己的时区提供日期/时间值- 提供格式化为用户区域设置的货币值

这需要我对电子邮件内容进行另一次传递,以检测在将电子邮件发送给用户之前是否有任何字段未合并,如果是,则在发送电子邮件之前适本地格式化这些字段值。因此,我想做的是从表字段值中提取所有分隔字段名的列表,并以逗号分隔形式返回该列表。

  • 我已经可以数出分隔符出现了多少次了
  • 我也可以找到第一个分隔符的位置
  • 如果我使用相同的开始和结束定界符,似乎很容易拆分这些值,但是因为我已经使用了许多电子邮件模板,所以这目前不可行

我还没有这方面的任何代码。我只是想避免编写自己的 MySQL 函数来执行此操作,方法是使用现有的 MySQL 函数(如果它们能够执行此操作)。

我尝试过使用 SUBSTRING、SUBSTRING_INDEX、LOCATE 的各种组合。

所以我需要做的是这样的事情:

SELECT msg_id, values_found_between(msg_content,"<",">") AS comma_delimited_list;

例如,源数据...

msg_id | msg_content
-------+------------
1 | The quick brown <fox> jumps over the lazy <dog>
2 | The quick brown fox jumps over the lazy dog

我可以获得这样的结果记录集:

msg_id | comma_seperated_list
-------+------------
1 | fox,dog

好吧,我有一个裂缝,这似乎运作良好:

CREATE FUNCTION db.`FN_find_values_between`(`in_haystack` VARCHAR(10000), `in_opening_delimiter` VARCHAR(1),`in_closing_delimiter` VARCHAR(1)) RETURNS varchar(1000) CHARSET utf8
BEGIN

DECLARE numFoundOpen INT DEFAULT 0;
DECLARE numFoundClose INT DEFAULT 0;
DECLARE numFoundTarget INT DEFAULT 0;
DECLARE numCurrentIndex INT DEFAULT 0;
DECLARE strOutput VARCHAR(1000) DEFAULT "";
DECLARE numSearchFromPos INT DEFAULT 1;
DECLARE numCurrentCharPosStart INT DEFAULT 1;
DECLARE numCurrentCharPosEnd INT DEFAULT 1;
DECLARE strCurrentFieldname VARCHAR(50) DEFAULT "";
DECLARE numLength INT DEFAULT 0;

SET numFoundOpen=
(SELECT
ROUND ((LENGTH(in_haystack)- LENGTH( REPLACE (in_haystack, in_opening_delimiter, ""))) / LENGTH(in_opening_delimiter)));

SET numFoundClose=
(SELECT
ROUND ((LENGTH(in_haystack)- LENGTH( REPLACE (in_haystack, in_closing_delimiter, ""))) / LENGTH(in_closing_delimiter)));
IF (numFoundOpen=numFoundClose) THEN
SET numFoundTarget=numFoundOpen;
END IF;

WHILE numCurrentIndex < numFoundTarget DO
SET numCurrentIndex=numCurrentIndex+1;
SET numCurrentCharPosStart = LOCATE(in_opening_delimiter, in_haystack, numSearchFromPos);
SET numCurrentCharPosEnd = LOCATE(in_closing_delimiter, in_haystack, numSearchFromPos);
SET numLength=1+(numCurrentCharPosEnd-numCurrentCharPosStart);
SET strCurrentFieldname=SUBSTRING(in_haystack,numCurrentCharPosStart,numLength);
SET strOutput=CONCAT(strOutput,strCurrentFieldname,",");
SET strCurrentFieldname="";
SET numSearchFromPos=numCurrentCharPosEnd+1;
END WHILE;
IF (strOutput <> "") THEN
SET strOutput=LEFT(strOutput,LENGTH(strOutput)-1);
END IF;
RETURN strOutput;
END;

最佳答案

根据上面的代码,我设法编写了自己的 MySQL 函数来执行此操作。

关于mysql - 将分隔值转换为逗号分隔列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55506397/

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