Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.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 server 如何从单个select语句中的某个字符分隔的数据的单行中获取多行_Sql Server_Sql Server 2008_Sql Server 2008 R2_Sql Server 2012 - Fatal编程技术网

Sql server 如何从单个select语句中的某个字符分隔的数据的单行中获取多行

Sql server 如何从单个select语句中的某个字符分隔的数据的单行中获取多行,sql-server,sql-server-2008,sql-server-2008-r2,sql-server-2012,Sql Server,Sql Server 2008,Sql Server 2008 R2,Sql Server 2012,在SQL Server 2008或更高版本中,如何在不使用拆分功能的情况下,为单次选择查询中由某个字符分隔的数据从单行中获取唯一的多行 示例: ID Data Name 1 '2014-01-01,2014-01-02,2014-01-03,2014-01-04' 'A1' 2 '2014-01-01,2014-01-02'

在SQL Server 2008或更高版本中,如何在不使用拆分功能的情况下,为单次选择查询中由某个字符分隔的数据从单行中获取唯一的多行

示例

ID  Data                                                Name
1   '2014-01-01,2014-01-02,2014-01-03,2014-01-04'       'A1'
2   '2014-01-01,2014-01-02'                             'B1'
3   '2014-01-03,2014-01-05,2014-01-06,2014-01-07'       'A1'


ID  Data            Name
1   '2014-01-01'    'A1'
1   '2014-01-02'    'A1'
1   '2014-01-03'    'A1'
1   '2014-01-04'    'A1'
3   '2014-01-05'    'A1'
3   '2014-01-06'    'A1'
3   '2014-01-07'    'A1'
2   '2014-01-01'    'B1'
2   '2014-01-02'    'B1'

查看这篇关于字符串拆分的SQLSentry文章。如果检查不同的技术,每种技术的速度和任何陷阱

拆分字符串并获取不同的值

下面的代码使用xml拆分器

-- Just playing
use tempdb;
go

-- drop the table
if object_id('results') > 0 
drop table results
go

-- create the table
create table results
(
  id int,
  data varchar(128),
  name varchar(2)
);
go

-- add data
insert into results values
(1,'2014-01-01,2014-01-02,2014-01-03,2014-01-04','A1'),
(2,'2014-01-01,2014-01-02','B1'),
(3,'2014-01-03,2014-01-05,2014-01-06,2014-01-07','A1');
go

-- Just the data
select * from results

-- Split the data
select distinct r.id, r.name, s.item 
from results r 
cross apply dbo.SplitStrings_XML(data, ',') s

这可能会有帮助