解析以逗号分隔的数据库字段

问题描述 投票:0回答:1

使用经典的ASP和MySql数据库。 我想解析一个包含标签列表的字段,以逗号分隔,并将这些结果输入到另一个表中。 因此,如果我在某个字段中有茶、咖啡、面包、牛奶,它会解析该字段并给我

咖啡

面包

牛奶

然后将列表上传到另一个表中

一旦获得解析的项目,我就可以上传它,我想我只需要帮助解析它。

我搜索过解析,但我很容易感到困惑。我中风了几次,我的大脑不再像以前那样工作了。

任何指导将不胜感激 谢谢, 企鹅

请记住,我使用的是带有 MySQL 数据库的经典 ASP。不确定该信息是否有帮助。

mysql parsing asp-classic
1个回答
0
投票

在 MariaDB 中,你可以尝试这样的事情:

WITH RECURSIVE cte AS (
SELECT 1 AS ctr, MAX(LENGTH(vals)-LENGTH(REPLACE(vals,',',''))+1) AS fLen FROM mytest 
  UNION ALL
SELECT ctr+1, fLen FROM cte WHERE ctr+1 <= fLen
  )
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(vals,',',ctr),',',-1) AS valsAsRows
  FROM cte
 CROSS JOIN mytest
  GROUP BY valsAsRows;

第一步是通过执行

LENGTH(column_name)-LENGTH(REPLACE(column_name,',',''))+1
获得以逗号分隔的总价值。在你的例子中

tea,coffee,bread,milk

将给出

LENGTH(column_name)=21
LENGTH(REPLACE(column_name,',','')=18
,因为我们已经将逗号替换为空。这给了我们
21-18=3
,但正确的字数是
4
,这就是为什么我在最后添加了
+1
。然后,使用
RECURSIVE cte
根据结果生成行编号。为了使逗号分隔值与它自己的行,我们
CROSS JOIN
与主表的
cte
,使用
SUBSTRING_INDEX()
与逗号作为分隔符和生成的行编号来获取值的位置。

这是一个测试小提琴:https://dbfiddle.uk/kvFrp2Bb

© www.soinside.com 2019 - 2024. All rights reserved.