【问题标题】:Change new line into New Record将新行更改为新记录
【发布时间】:2020-07-19 06:58:25
【问题描述】:

我有如下记录:

是否可以将SQL Server 2008 R2上的这条记录转成下表?

图片1 SiteName 类型是 Varchar,Allocation 也是 Varchar。每个值都有新行,我的意思是新行是 char(13)。该值可以是 '(0.0 - 12.0)' + CHAR(13) + '(15.0 - 18.0)' 等等。

图 2 这个 char(13) 是在字段分配时将每一行分成新行的引用,每一行都将继承它们的 SiteName

新的格式化表格会被转储到新表格(pic.2)中,所以原始数据(pic.1)仅供参考。

我坚持在 SQL Server 2008 上执行此操作,非常感谢任何建议。

【问题讨论】:

  • 您的分配列类型是什么?您在应用中使用什么语言?
  • 所有字段都是 varchar,语言尚未确定,因为我们现在要做的只是将数据转换为新格式,因此人们只需将其解析到任何应用程序中
  • 正确存储数据肯定比像这样转换数据要好。
  • @DaleK 感谢您的建议,但问题是原始数据来自我无法控制的另一方:(
  • 在图 1 中,SiteName 类型是 Varchar,Allocation 也是 Varchar。每个值都有新行,我的意思是新行是 char(13)。该值可以是 '(0.0 - 12.0)' + CHAR(13) + '(15.0 - 18.0)' 等等。在图 2 中,这个 char(13) 是在字段分配时将每一行分成新行的引用,每一行都将继承它们的 SiteName

标签: sql-server tsql sql-server-2008-r2


【解决方案1】:

你需要像下面的例子那样分割数据(如果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);

【讨论】:

  • 感谢@gotqn,我现在将尝试在我的桌子上实施。稍后会回来
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-18
  • 2018-05-12
  • 1970-01-01
  • 2020-09-20
  • 2023-03-25
  • 1970-01-01
相关资源
最近更新 更多