【问题标题】:Parse Columns in SQL by delimiter通过分隔符解析 SQL 中的列
【发布时间】:2018-01-31 16:09:52
【问题描述】:

在 SQL Server 中,我有一个包含多列的表/视图。最后一列如下所示:

COL
---------------------------------
|test|test|test11|testing|final
|test|test|test1|testing2|final3
|test|test|test17|testing|final6

如何通过|解析此列,并与现有表的右侧组合,如下所示:

COL1     COL2                                COL     Parse1    Parse2    Parse3   Parse4    Parse5
   1        4    |test|test|test11|testing|final       test      test    test11  testing     final
   2        6   |test|test|test1|testing2|final3       test      test    test1  testing2    final3
   5        9   |test|test|test17|testing|final6       test      test    test17  testing    final6

COL 列的解析次数相同。

任何帮助将非常感谢!

【问题讨论】:

标签: sql-server parsing join delimiter


【解决方案1】:

不清楚在COL 字段中是否有前导|。如果是这样,您可能需要转移/x[n]

模式很清晰。易于根据需要扩展或收缩

示例

Declare @YourTable Table ([COL] varchar(50))
Insert Into @YourTable Values 
 ('test|test|test11|testing|final')
,('test|test|test1|testing2|final3')
,('test|test|test17|testing|final6')

Select A.* 
      ,B.*
 From  @YourTable A
 Cross Apply (
                Select Pos1 = ltrim(rtrim(xDim.value('/x[1]','varchar(max)')))
                      ,Pos2 = ltrim(rtrim(xDim.value('/x[2]','varchar(max)')))
                      ,Pos3 = ltrim(rtrim(xDim.value('/x[3]','varchar(max)')))
                      ,Pos4 = ltrim(rtrim(xDim.value('/x[4]','varchar(max)')))
                      ,Pos5 = ltrim(rtrim(xDim.value('/x[5]','varchar(max)')))
                      ,Pos6 = ltrim(rtrim(xDim.value('/x[6]','varchar(max)')))
                      ,Pos7 = ltrim(rtrim(xDim.value('/x[7]','varchar(max)')))
                      ,Pos8 = ltrim(rtrim(xDim.value('/x[8]','varchar(max)')))
                      ,Pos9 = ltrim(rtrim(xDim.value('/x[9]','varchar(max)')))
                From  (Select Cast('<x>' + replace((Select replace(A.Col,'|','§§Split§§') as [*] For XML Path('')),'§§Split§§','</x><x>')+'</x>' as xml) as xDim) as B1
             ) B

退货

【讨论】:

  • 支持,但如果您是 2016 年或更高版本,请考虑将其转换为 JSON。虽然我还没有测试过,但很多同事告诉我它比 XML 有显着的性能提升。
  • @NickKnauer 乐于助人
  • @ColdSolstice 我也听说过,但我还没有亲眼目睹。现在我正在考虑它,我将执行一些基准测试并让您知道......稍后:)
猜你喜欢
  • 2013-06-16
  • 1970-01-01
  • 2019-01-12
  • 2020-06-12
  • 2021-06-14
  • 2019-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多