1

我正在使用 SQL Server Management Studio Express。我有一个表,其列名如下:period、、account等等。

account列包含如下值2abc-414-3136-12356478-000-0000-000

我需要做的是拆分值并将它们添加到另一个表中,例如2abcgo to company name414go to location code3136to Department code12356478to nat acc000to pg0000toig000to Fut

详细的解释将不胜感激。我也对在哪里编写代码感到困惑,请解释一下。

4

1 回答 1

1

我假设您的信息是相同的(7 个字段,如您的示例)

declare @a varchar(500)

declare #crs insensitive cursor for
select account from mysourcetable
for read only
open #crs
fetch next from #crs into @a
while(@@FETCH_STATUS = 0)
begin

    declare @rest varchar(500)

    declare @field1 varchar(20)
    set @field1 = SUBSTRING(@a, 0, charindex('-', @a))
    set @rest = SUBSTRING(@a, charindex('-', @a) + 1, 100)

    declare @field2 varchar(20)
    set @field2 = SUBSTRING(@rest, 0, charindex('-', @rest))
    set @rest = SUBSTRING(@rest, charindex('-', @rest) + 1, 100)

    declare @field3 varchar(20)
    set @field3 = SUBSTRING(@rest, 0, charindex('-', @rest))
    set @rest = SUBSTRING(@rest, charindex('-', @rest) + 1, 100)

    declare @field4 varchar(20)
    set @field4 = SUBSTRING(@rest, 0, charindex('-', @rest))
    set @rest = SUBSTRING(@rest, charindex('-', @rest) + 1, 100)

    declare @field5 varchar(20)
    set @field5 = SUBSTRING(@rest, 0, charindex('-', @rest))
    set @rest = SUBSTRING(@rest, charindex('-', @rest) + 1, 100)

    declare @field6 varchar(20)
    set @field6 = SUBSTRING(@rest, 0, charindex('-', @rest))
    set @rest = SUBSTRING(@rest, charindex('-', @rest) + 1, 100)

    declare @field7 varchar(20)
    set @field7 = @rest

    insert into mytargettable (field1, field2, field3, field4, field5, field6, field7)
    values (@field1, @field2, @field3, @field4, @field5, @field6, @field7)

    fetch next from #crs into @a
end
close #crs
deallocate #crs

您可以将此结果放入带有游标的循环中,以通过查询滚动表结果的所有行。您可以使用插入语句代替最终选择来填充目标表。

告诉我是否还好。

编辑后:我已将原始拆分封装到光标中。游标是一种获取查询输出并使用 fetch 命令处理每一行的工具。在您的情况下,我将表的字段帐户值放在 @a 变量中。

@@FETCH_STATUS 检查是否存在其他要处理的行。因此,在迭代结束时,我将结果放入目标表并继续。

这是一个模板,您必须根据您的目标进行自定义,如果有一些 sintax 错误请修复,因为我已经写了没有经过真正的测试。祝你今天过得愉快

于 2013-07-18T15:16:36.167 回答