将新行更改为新记录
Change new line into New Record
我有记录如下:
是否可以将SQL Server 2008 R2上的这条记录变成下面的table?
图片1
SiteName 类型是 Varchar,Allocation 也是 Varchar。每个值都有新行,我的意思是新行是 char(13)。该值可以是 '(0.0 - 12.0)' + CHAR(13) + '(15.0 - 18.0)' 等等。
图2
这个 char(13) 是在字段分配上将每一行分成新行的引用,每一行都将继承它们的 SiteName
新格式化的table会转储到新的table(图2)中,所以原始数据(图1)仅供参考。
我坚持在 SQL Server 2008 上执行此操作,非常感谢任何建议。
您需要像下面的示例那样拆分数据(如果 CHAR(13) + CHAR(10)
不是您的新行分隔符,您可以用不同的符号拆分:
DECLARE @DataSource TABLE
(
[SiteName] NVARCHAR(128)
,[Allocation] NVARCHAR(MAX)
);
INSERT INTO @DataSource ([SiteName], [Allocation])
VALUES
('a', '1
2')
,('b', '3
4
5')
,('c', '6
7');
WITH DataSource ([SiteName], [Allocations]) AS
(
SELECT [SiteName]
,CAST('<a>' + REPLACE([Allocation], CHAR(13) + CHAR(10), '</a><a>') + '</a>' AS XML)
FROM @DataSource DS
)
SELECT DS.SiteName
,LTRIM(RTRIM(T.c.value('.', 'nvarchar(128)')))
FROM DataSource DS
CROSS APPLY DS.Allocations.nodes('./a') T(c);
我有记录如下:
是否可以将SQL Server 2008 R2上的这条记录变成下面的table?
图片1 SiteName 类型是 Varchar,Allocation 也是 Varchar。每个值都有新行,我的意思是新行是 char(13)。该值可以是 '(0.0 - 12.0)' + CHAR(13) + '(15.0 - 18.0)' 等等。
图2 这个 char(13) 是在字段分配上将每一行分成新行的引用,每一行都将继承它们的 SiteName
新格式化的table会转储到新的table(图2)中,所以原始数据(图1)仅供参考。
我坚持在 SQL Server 2008 上执行此操作,非常感谢任何建议。
您需要像下面的示例那样拆分数据(如果 CHAR(13) + CHAR(10)
不是您的新行分隔符,您可以用不同的符号拆分:
DECLARE @DataSource TABLE
(
[SiteName] NVARCHAR(128)
,[Allocation] NVARCHAR(MAX)
);
INSERT INTO @DataSource ([SiteName], [Allocation])
VALUES
('a', '1
2')
,('b', '3
4
5')
,('c', '6
7');
WITH DataSource ([SiteName], [Allocations]) AS
(
SELECT [SiteName]
,CAST('<a>' + REPLACE([Allocation], CHAR(13) + CHAR(10), '</a><a>') + '</a>' AS XML)
FROM @DataSource DS
)
SELECT DS.SiteName
,LTRIM(RTRIM(T.c.value('.', 'nvarchar(128)')))
FROM DataSource DS
CROSS APPLY DS.Allocations.nodes('./a') T(c);