使用经典的ASP和MySql数据库。 我想解析一个包含标签列表的字段,以逗号分隔,并将这些结果输入到另一个表中。 因此,如果我在某个字段中有茶、咖啡、面包、牛奶,它会解析该字段并给我
茶
咖啡
面包
牛奶
然后将列表上传到另一个表中
一旦获得解析的项目,我就可以上传它,我想我只需要帮助解析它。
我搜索过解析,但我很容易感到困惑。我中风了几次,我的大脑不再像以前那样工作了。
任何指导将不胜感激 谢谢, 企鹅
请记住,我使用的是带有 MySQL 数据库的经典 ASP。不确定该信息是否有帮助。
在 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