我有一个名为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]
任何帮助将不胜感激
答案 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