使用SQL查询拆分字段

时间:2013-12-14 08:27:13

标签: sql

我有一个表格,其中包含100个字符或更少的字段“comments”。我想将此字段分成每个20个字符的批处理,然后在每批20个字符后添加分隔符。字段中的文本没有可以使用的任何分隔符。我可以使用子字符串为前20个字母执行此操作,但不能为其余字母执行此操作。有人可以建议一个SQL查询来执行此操作吗?

非常感谢:)

2 个答案:

答案 0 :(得分:0)

试试这个。

select

concat
(
concat(substring(comments, 1, 20), '|'),
concat(substring(comments, 21, 20), '|'),
concat(substring(comments, 41, 20), '|'),
concat(substring(comments, 61, 20), '|'),
concat(substring(comments, 81, 20), '|')
)

from
t

SQL小提琴:http://sqlfiddle.com/#!2/ad537/1

答案 1 :(得分:0)

尝试使用用户定义的功能

CREATE FUNCTION dbo.SplitBy(
@String varchar(max),
@Delimiter char(1)
)
returns varchar(max)
as     
begin

declare @fldSize int
    set @fldSize = 20
declare @TotalCnt int
    set @TotalCnt = len(@String)
declare @c int
    set @c = 1

declare @TS varchar(max)
    set @TS = ''

if @TotalCnt > @fldSize begin

    set @TS = substring(@String, @c, @fldSize)
    set @c = @c + @fldSize

    while @c < @TotalCnt begin
        set @TS = @TS + @Delimiter + substring(@String, @c, @fldSize)
        set @c = @c + @fldSize
    end
    if @c = @TotalCnt begin
    set @TS =  @TS + @Delimiter + substring(@String, @c, @TotalCnt-(@c-1))
    end
    return @TS
end

return @String  
end

USAGE

update [YourTable] set fldToDelimit = dbo.SplitBy(fldToDelimit, '|')
希望能帮助你!