mysql - SQL:从列表中提取项目并将其放入新行

标签 mysql sql split string-formatting

有没有办法提取列中的列表项并将每个项目放在自己的行中?我也想取消列表括号 [] !有人可以帮忙吗?

输入:

name    doc_id                              type
JD      [409839589143224]                   1843
JD      [470573363064028,239564999464566]    778
BK      [426580780775177,342730259144025]    202

期望的输出:

name    doc_id                              type
JD      409839589143224                     1843
JD      470573363064028                     778
JD      239564999464566                     778
BK      426580780775177                     202
BK      342730259144025                     202

最佳答案

这是使用 tsql 的解决方案,我确信您可以使用 MySql 执行相同的操作

CREATE FUNCTION ufn_split (@list nvarchar(MAX))
   RETURNS @tbl TABLE (part nvarchar(max) NOT NULL) AS
BEGIN
   DECLARE @pos        int,
           @nextpos    int,
           @valuelen   int

   SELECT @pos = 0, @nextpos = 1

   WHILE @nextpos > 0
   BEGIN
      SELECT @nextpos = charindex(',', @list, @pos + 1)
      SELECT @valuelen = CASE WHEN @nextpos > 0
                              THEN @nextpos
                              ELSE len(@list) + 1
                         END - @pos - 1
      INSERT @tbl (part)
         VALUES (substring(@list, @pos + 1, @valuelen))
      SELECT @pos = @nextpos
   END
   RETURN
END;
GO

SELECT t.name, st.part, t.type 
FROM @table AS t
CROSS APPLY ufn_split( LEFT(RIGHT(t.doc_id, LEN(t.doc_id) - 1),LEN(t.doc_id) - 2) ) AS st;

第一个函数是 TSQL 上 Split 函数的实现,从这里 Split function equivalent in T-SQL?

关于mysql - SQL:从列表中提取项目并将其放入新行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19971042/

相关文章:

mysql - mysql 的 Powershell 代码不工作

c# - 抛出类型为 'System.OutOfMemoryException' 的异常。使用 IDataReader 时的 C#

java - 如何以MapReduce格式在一行中打印一些 token ?

python - 拆分字符串并在 python 中获取数字?

mysql - SQL:根据计划分配 id

php - Codeigniter:常用函数。与多个功能。数据库查询性能

mysql - Invision 3.4 sql查询

sql - 如何动态决定在 SQL Server 存储过程中加入哪些表

java - 从 HTML 代码获取 'alt'

php - utf8mb4_unicode_ci 与 utf8mb4_bin