我正在使用SQL server management studio express。我有一个表格,列名如:period
,account
,等等。
account
列包含2abc-414-3136-12356478-000-0000-000
我需要做的是拆分值并将它们添加到另一个表格,例如2abc
转到company name
,414
转到location code
,3136
转到Department code
,12356478
转到nat acc
, 000
至pg
,0000
至ig
和000
至Fut
。
详细解释将深表感谢。此外,我对编写代码的位置感到困惑,请解释一下。
答案 0 :(得分: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
这个结果你可以放入一个带有光标的循环,以便通过查询滚动表格的所有行。您可以使用insert语句填充目标表,而不是最终选择。
告诉我是否可以。
编辑后: 我已将原始分割封装到光标中。 游标是一个获取查询输出并使用fetch命令处理每一行的工具。 在您的情况下,我将表的字段帐户值放在@a变量中。
@@ FETCH_STATUS检查是否存在要处理的其他行。因此,在迭代结束时,我将目标表放入结果并继续。
这是一个模板,你必须为你的目标定制,如果有一些sintax bug请修复,因为我写了没有真正的测试。 祝你有愉快的一天