【问题标题】:Inserting a delimiter插入分隔符
【发布时间】:2016-07-15 15:32:38
【问题描述】:

MySql 有一个函数 CONCAT_WS,我用它来将带有分隔符的多个字段导出到一个字段中。效果很好!

我查询的数据库中存储了多个字段,其中包含我需要单独提取每个字段的数据,但在每个字段中,数据需要包含分隔符。我当然可以进行连接,但如果我的数据需要多达 100 个唯一值,那么设置确实需要一段时间。下面是我所说的一个例子

Stored Data  01020304050607                    
End Result   01,02,03,04,05,06,07

Stored Data  01101213
End Result   01,10,12,13

MySQL 中是否有执行上述操作的函数?

【问题讨论】:

  • 那么问题来了:如果您需要以非常不同的格式检索数据,为什么要以这种方式存储数据?
  • 您必须编写一个存储函数来拆分它。
  • 更好的是,在拆分时,不要使用 CSV 保存数据。创建新行。如果您发现自己每天都在使用 find_in_set 和 group_concat 来保存数据组合,那么您可能做错了什么。如果是这样,请参阅Junction Tables。对于一对多,与多对多,相同的概念。不要保存 CSV 数据。
  • 抱歉,创建数据模式时我不在。另外,我不在技术方面。只是数据库的用户。我想出了一个替代方案,而无需创建过程/函数。我正在使用 Excel 根据从数据字典中提取字段名称和响应值来创建查询。

标签: mysql sql delimiter


【解决方案1】:

我对 mysql 不是很熟悉,但我之前已经看到过类似的问题出现在正则表达式函数有用的地方。有可用的用户定义函数允许使用类似 Oracle 的正则表达式函数,因为它们在 mysql 中的支持很弱。见这里:https://github.com/hholzgra/mysql-udf-regexp

所以你可以这样做:

select trim(TRAILING ',' FROM regexp_replace(your_column, '(.{2})', '\1,') )
from your_table;

这会每 2 个字符添加一个逗号,然后去掉最后一个。也许这会给你一些想法。

【讨论】: