如何使用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