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
如何使用SQL查询将单个列值拆分为多个列,并将值作为列名_Sql_Sql Server_String - Fatal编程技术网

如何使用SQL查询将单个列值拆分为多个列,并将值作为列名

如何使用SQL查询将单个列值拆分为多个列,并将值作为列名,sql,sql-server,string,Sql,Sql Server,String,我试图将值作为字段名从中的单个列获取到多个列。我见过许多不同的问题与此类似,所以尝试了所有的选择,但没有任何帮助 例如 Details Field value: FirstName:John|LastName:Mike|DateOfBirth:09/09/1980|Department:IT| 预计如下: 我的问题 select address, left(Details,charindex('|',Details)-1) as FirstName, substring(Detai

我试图将值作为字段名从中的单个列获取到多个列。我见过许多不同的问题与此类似,所以尝试了所有的选择,但没有任何帮助

例如

Details Field value: FirstName:John|LastName:Mike|DateOfBirth:09/09/1980|Department:IT|
预计如下:

我的问题

select address,  
  left(Details,charindex('|',Details)-1) as FirstName,
  substring(Details,charindex('|',Details)+1,len(Details)) as LastName  
from 
  Employee  
这就是我的查询结果


这里有一个选项,前提是字符串布局一致

范例

返回

编辑-XML版本


这里有一个选项,前提是字符串布局一致

范例

返回

编辑-XML版本


这里有一个使用动态sql和几个替换函数的简单方法

DECLARE 
    @string nvarchar(4000) = N'FirstName:John|LastName:Mike|DateOfBirth:09/09/1980|Department:IT|',
    @d_sql nvarchar(4000) = N'',
    @debug bit = 0;

SELECT @d_sql = CONCAT('SELECT [',
    REPLACE(REPLACE(TRIM('|' FROM @string), ':', '] = '''), '|', ''', ['), ''';'
    );

IF @debug = 1
BEGIN 
    PRINT(@d_sql);
END;
ELSE 
BEGIN 
    EXEC sys.sp_executesql @d_sql;
END;
生成的SQL最终看起来像@debug=1

SELECT [FirstName] = 'John', [LastName] = 'Mike', [DateOfBirth] = '09/09/1980', [Department] = 'IT';
这反过来会产生以下结果@debug=0

FirstName LastName DateOfBirth Department
--------- -------- ----------- ----------
John      Mike     09/09/1980  IT

这里有一个使用动态sql和几个替换函数的简单方法

DECLARE 
    @string nvarchar(4000) = N'FirstName:John|LastName:Mike|DateOfBirth:09/09/1980|Department:IT|',
    @d_sql nvarchar(4000) = N'',
    @debug bit = 0;

SELECT @d_sql = CONCAT('SELECT [',
    REPLACE(REPLACE(TRIM('|' FROM @string), ':', '] = '''), '|', ''', ['), ''';'
    );

IF @debug = 1
BEGIN 
    PRINT(@d_sql);
END;
ELSE 
BEGIN 
    EXEC sys.sp_executesql @d_sql;
END;
生成的SQL最终看起来像@debug=1

SELECT [FirstName] = 'John', [LastName] = 'Mike', [DateOfBirth] = '09/09/1980', [Department] = 'IT';
这反过来会产生以下结果@debug=0

FirstName LastName DateOfBirth Department
--------- -------- ----------- ----------
John      Mike     09/09/1980  IT

真正的解决方案是修复数据模型。真正的解决方案是修复数据模型。感谢您的帮助@John。多谢。不幸的是,我使用的是SSMS 2014版本,因此它会为try\u convert和Json\u值内置函数抛出错误。@Uba还有一种XML方法。浏览@Uba查看XML版本的编辑感谢您的帮助@John。多谢。不幸的是,我使用的是SSMS 2014版本,因此它会为try\u convert和Json\u值内置函数抛出错误。@Uba还有一种XML方法。浏览一下@Uba,查看XML版本的编辑
FirstName LastName DateOfBirth Department
--------- -------- ----------- ----------
John      Mike     09/09/1980  IT