【发布时间】:2019-03-14 16:43:08
【问题描述】:
【问题讨论】:
-
能否更改表格或源数据的设计?因为这将是比将字符串分成 2 列更好的解决方案。
-
添加了我正在使用的数据库
-
更新了表格设计
标签: sql sql-server split
【问题讨论】:
标签: sql sql-server split
解决上述问题的最佳和简单方法是
选择值作为 UID、姓名、年龄、教育、部门
来自 StackSoln
交叉应用 string_split(UID,',')
STRING_SPLIT
一个表值函数,它根据指定的分隔符将字符串拆分为多行子字符串。
交叉申请
仅返回从表值函数产生结果集的外部表中的行。换句话说,CROSS APPLY 的结果不包含左侧表表达式中没有从右侧表表达式中获得任何结果的任何行。 CROSS APPLY 作为逐行 INNER JOIN 工作
【讨论】:
假设sql-server 大于或等于2016 版本。那么就可以使用string_split()函数了:
select spl.u_id, s.name us_uid, s.age col_1, s.dob col_2, s.education col_3, s.department col_4 from @source s
cross apply( select value u_id from string_split( (select u_id from @source s2 where s2.u_id = s.u_id ),',')
where CHARINDEX(value,s.u_id,1) > 0) spl
【讨论】: