Mysql 将VARCHAR字段拆分为2行

Mysql 将VARCHAR字段拆分为2行,mysql,text,chunking,Mysql,Text,Chunking,我有一个充满电子邮件的数据库。它包含to、from、subject、body等列。我试图输出基本相同的格式,但对于我将使用输出文件的应用程序,正文不能超过300个字符。我不想只抓取前300个字符,因为我需要所有的文本。我想做的是将文本分块,如果电子邮件正文是900个字符,则返回3行,每行包含邮件的三分之一,并且所有行都包含收件人、发件人、主题等信息 i、 我有这个: sender1 recipient1 subject1 body1(600 characters

我有一个充满电子邮件的数据库。它包含to、from、subject、body等列。我试图输出基本相同的格式,但对于我将使用输出文件的应用程序,正文不能超过300个字符。我不想只抓取前300个字符,因为我需要所有的文本。我想做的是将文本分块,如果电子邮件正文是900个字符,则返回3行,每行包含邮件的三分之一,并且所有行都包含收件人、发件人、主题等信息

i、 我有这个:

sender1      recipient1       subject1       body1(600 characters)
sender2      recipient2       subject2       body2(150 characters)
我想要这个:

sender1     recipient1        subject1       body1(first 300 characters)
sender1     recipient1        subject1       body1(next 300 characters)
sender2     recipient2        subject2       body2(150 characters)

谢谢

下面是一个方法示例:

SELECT p.i, SUBSTR(e.body,p.i*n.len+1,n.len) AS bodypart
  FROM ( SELECT 'abcdefghijklmnopqrstuvwxyz' AS body
       ) e
 CROSS
  JOIN ( SELECT 10 AS len
       ) n
  JOIN ( SELECT 0 AS i UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3
                       UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6
                       UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9
       ) p
    ON p.i <= LENGTH(e.body) DIV n.len

更新 该查询有一个角大小写,当LENGTH(e.body)是n.len的偶数倍时,它将返回一个“额外”的空片段。一个解决方案是更改
ON
子句中的谓词:

    ON p.i < LENGTH(e.body) DIV n.len 
    OR (p.i = LENGTH(e.body) DIV n.len AND LENGTH(e.body) MOD n.len > 0)
p.i.上的
<长度(e.body)DIV n.len
或(p.i=长度(e.body)DIV n.len和长度(e.body)MOD n.len>0)

还请注意,如果您将
bodypart
表达式的结果存储在VARCHAR列中,则每个部分的任何尾随空格都将被删除。

的作用就像一个符咒。谢谢你的帮助!我将
I
列包括在结果集中,因为我认为您可能希望跟踪从主体中提取的片段的顺序。请注意,有一个“角”情况,其中一个额外的“空”工件将返回
长度(e.body)
n.len
的偶数倍。
    ON p.i < LENGTH(e.body) DIV n.len 
    OR (p.i = LENGTH(e.body) DIV n.len AND LENGTH(e.body) MOD n.len > 0)