Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL在char处拆分字符串,然后将每个字符串拆分为单独的chars(),作为视图或仅选择_Sql_Sql Server_String_Split - Fatal编程技术网

SQL在char处拆分字符串,然后将每个字符串拆分为单独的chars(),作为视图或仅选择

SQL在char处拆分字符串,然后将每个字符串拆分为单独的chars(),作为视图或仅选择,sql,sql-server,string,split,Sql,Sql Server,String,Split,我有一列数据,如下所示: xy w12,jwwx , mpp w,a n p ,234567 请注意,项目是csv,很容易分离;然而,我有一些其他的要求,使这更加困难 我需要拆分的字符串(包括从逗号到逗号的任何空格)成行 当然,最后一个要求是,这些字符串中的每一个都要按顺序拆分为包含空格的字符列。(最大值不得超过8个字符) 我需要为每个拆分创建一行数据,如下所示 char(1) | Char(2) | char(3) | char(4) | char(5) | ch

我有一列数据,如下所示:

xy w12,jwwx  , mpp w,a n p ,234567
请注意,项目是csv,很容易分离;然而,我有一些其他的要求,使这更加困难

我需要拆分的字符串(包括从逗号到逗号的任何空格)成行

当然,最后一个要求是,这些字符串中的每一个都要按顺序拆分为包含空格的字符列。(最大值不得超过8个字符)

我需要为每个拆分创建一行数据,如下所示

             char(1) | Char(2) | char(3) | char(4) | char(5) | char(6) | char(7) | char(8)


如果我理解正确,您只需要
substring()
函数(在某些数据库中也可以使用
substr()
):

编辑:

上面假设字符串在单独的行中,这对我来说更有意义。假设逗号不是有效字符,请使用
string\u split()
(或您可以在web上找到的相关函数):


只是另一个使用少量XML和交叉应用的选项

示例

Declare @YourTable table (id int,SomeCol varchar(max))
Insert Into @YourTable values
(1,'xy w12,jwwx  , mpp w,a n p ,234567')

Select A.ID
      ,char1 = substring(RetVal,1,1)
      ,char2 = substring(RetVal,2,1)
      ,char3 = substring(RetVal,3,1)
      ,char4 = substring(RetVal,4,1)
      ,char5 = substring(RetVal,5,1)
      ,char6 = substring(RetVal,6,1)
      ,char7 = substring(RetVal,7,1)
      ,char8 = substring(RetVal,8,1)
 From  @YourTable A
 Cross Apply (
                Select RetSeq = Row_Number() over (Order By (Select null))
                      ,RetVal = B.i.value('(./text())[1]', 'varchar(max)')
                From  (Select x = Cast('<x>' + replace((Select replace(SomeCol,',','§§Split§§') as [*] For XML Path('')),'§§Split§§','</x><x>')+'</x>' as xml).query('.')) as A 
                Cross Apply x.nodes('x') AS B(i)
             ) B

您使用的是什么数据库?@GordonLinoff MS-SQL Server OK所以我将字符串拆分为列,然后在每个列上添加子字符串?如果字符串没有8个字符,我会得到一个错误吗??
select substring(col, 1, 1) as char_1,
       substring(col, 2, 1) as char_2,
       . . .
       substring(col, 8, 1) as char_8
from t;
select substring(str, 1, 1) as char_1,
       substring(str, 2, 1) as char_2,
       . . .
       substring(str, 8, 1) as char_8
from t cross apply
     string_split(t.data, ',') ss(str);
Declare @YourTable table (id int,SomeCol varchar(max))
Insert Into @YourTable values
(1,'xy w12,jwwx  , mpp w,a n p ,234567')

Select A.ID
      ,char1 = substring(RetVal,1,1)
      ,char2 = substring(RetVal,2,1)
      ,char3 = substring(RetVal,3,1)
      ,char4 = substring(RetVal,4,1)
      ,char5 = substring(RetVal,5,1)
      ,char6 = substring(RetVal,6,1)
      ,char7 = substring(RetVal,7,1)
      ,char8 = substring(RetVal,8,1)
 From  @YourTable A
 Cross Apply (
                Select RetSeq = Row_Number() over (Order By (Select null))
                      ,RetVal = B.i.value('(./text())[1]', 'varchar(max)')
                From  (Select x = Cast('<x>' + replace((Select replace(SomeCol,',','§§Split§§') as [*] For XML Path('')),'§§Split§§','</x><x>')+'</x>' as xml).query('.')) as A 
                Cross Apply x.nodes('x') AS B(i)
             ) B
ID  char1   char2   char3   char4   char5   char6   char7   char8
1   x       y               w       1       2       
1   j       w       w       x                       
1           m       p       p               w       
1   a               n               p               
1   2       3       4       5       6       7