SQL字符串长度限制但返回多行

时间:2014-11-06 02:39:21

标签: sql string select substring union

我有一个名为notes的表,其列为nvarchar(MAX),这列可能有10个字符,也可能有800个。我需要将其分成250个字符段。

如果下面的这一行是表中的值,我需要创建2行,最多250个字符。如果算上字符,你会分开单词voicemail。我需要看到它在一个单词的中间,而不是分解它。

  

Blanket Lien提交,帐户返回提供商。 Blah Blah会的   继续关注并追求留置权付款。叫做Pt Blahat   XXX-XXX-XXXX。留下语音邮件。语音信箱问候语未说明   名称。在xxx-xxx-xxxx处称为Pt。留下语音邮件。语音邮件问候语   没有说出一个名字。

我需要它看起来像这样,我不知道这样做。

第1行:

  

Blanket Lien提交,帐户返回提供商。 Blah Blah会的   继续关注并追求留置权付款。叫做Pt Blahat   XXX-XXX-XXXX。留下语音邮件。

第2行:

  

语音信箱问候语没有说明名称。在xxx-xxx-xxxx处称为Pt。   留下语音邮件。语音邮件问候语没有说明名称。

我试过了这个,但它切断了这些话。

SELECT     Acct, SUBSTRING(Notes, 1, 249) as Note, 'A1' AS  Prefix
FROM         dbo.[RegionalOneNotesResults]
UNION
SELECT     Acct, SUBSTRING(Notes, 250, 249) as Note, 'B2' AS Prefix
FROM          dbo.[RegionalOneNotesResults]

任何帮助将不胜感激

2 个答案:

答案 0 :(得分:0)

此代码应该按您的要求执行:

    CREATE PROC WORD_WRAPPED_STRING
          @string VARCHAR(800),
          @length INT

    AS

 SET NOCOUNT ON

 DECLARE  @string_length INT,
          @output        VARCHAR(800),
          @trailing_char CHAR(1),
          @leading_char  CHAR(1)

 IF @length = LEN(@string)
   BEGIN
     PRINT 'please provide a smaller length for dividing the string.'

     RETURN
   END

 IF CHARINDEX(CHAR(13),@string) <> 0
   BEGIN
     SELECT @string = REPLACE(@string,CHAR(10),' ')

     SELECT @string = REPLACE(@String,CHAR(13),)
   END

 SET CONCAT_NULL_YIELDS_NULL OFF

 SELECT @string_length = LEN(@string)

 WHILE @string_length & GT
   ; @length

 BEGIN
   SET @trailing_char = SUBSTRING(LEFT(@string,(@length + 1)),(@length + 1),
                                  1)

   SET @leading_char = SUBSTRING(LEFT(@string,@length),@length,1)

   IF @leading_char = ' '
       OR @trailing_char = ' '
     BEGIN
       SELECT @output = @output + SUBSTRING(@string,1,@length) + CHAR(13)

       SELECT @string = SUBSTRING(@string,(@length + 1),(LEN(@string) - @length + 1))

       SELECT @string_length = LEN(@string)
     END
   ELSE
     -- find the first occurence of a blank space before the trailing space
     BEGIN
       DECLARE  @i INT

       SELECT @i = CHARINDEX(' ',REVERSE(SUBSTRING(@string,1,@length)))

       SELECT @output = @output + SUBSTRING(@string,1,(@length - @i)) + CHAR(13)

       SELECT @string = SUBSTRING(@string,(@length - @i + 2),(LEN(@string) - (@length - @i)))

       SELECT @string_length = LEN(@string)
     END
 END

 SELECT @output = @output + CHAR(13) + @string

 SELECT @output

GO

取自http://www.toadworld.com/platforms/sql-server/w/wiki/10085.word-wrap-a-string.aspx

答案 1 :(得分:0)

我不明白这个问题。您希望将字符串分段250个字符,但您希望的输出仅按156

分隔
  

声明@varSample varchar(800);

     

设置@varSample =&#39; Blanket Lien Filed,帐户返回给提供商。胡说   Blah将继续关注并追求留置权付款。叫做Pt Blahat   XXX-XXX-XXXX。留下语音邮件。语音信箱问候语未说明   名称。在xxx-xxx-xxxx处称为Pt。留下语音邮件。语音邮件问候语   没有说出名字。&#39;;

SELECT SUBSTRING(@varSample, 1, 156) as Note, 'A1' AS  Prefix
UNION SELECT SUBSTRING(@varSample, 157, 300) as Note, 'B1' AS  Prefix