在sql中拆分所有字符的字符串

时间:2018-02-23 00:31:56

标签: sql sql-server tsql split sql-server-2016

我正在尝试在空格分隔符上拆分SQL中的字符串。空格数会发生变化,因此可以有4或5列的值。我正在尝试使用CHARINDEXSUBSTRING,但无法通过第一个分隔符。

示例:

输入为'444 Addison Avenue SA 5222'

2 个答案:

答案 0 :(得分:3)

要拆分成列,您可以使用一个小的XML与CROSS APPLY

一起使用

示例

Declare @YourTable Table ([SomeCol] varchar(50))
Insert Into @YourTable Values 
 ('444 Addison Avenue SA 5222')
,('1 Washington Square')


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)')))
                From  (Select Cast('<x>' + replace((Select replace([SomeCol],' ','§§Split§§') as [*] For XML Path('')),'§§Split§§','</x><x>')+'</x>' as xml) as xDim) as A 
             ) B

<强>返回

enter image description here

答案 1 :(得分:0)

仅基于基于XML 的拆分,您才能获得相同的结果:

return [
    'id' => 'app-frontend',
    'basePath' => dirname(__DIR__),
    'controllerNamespace' => 'backend\controllers',
   'bootstrap' => ['log'],
    :::::::::::::
]

结果:

enter image description here