微软 SQL Server 2008
我有两张 table 。其中有一列包含 _
分隔的数据
例子:
Y_21_CA
<BR>
such that:
Yes/No_Age_State
我需要解析此列中的数据并将其插入到另一个表中,该表中的每个值都有单独的列。假设表 A 包含一列,如上例所示,但表 B 包含三列,YesOrNo, Age, usState
。
最简单的方法是什么?我试过做类似的事情:
UPDATE TableA
SET YesOrNo = SUBSTRING (TableB.Column1, 1, 1)
但是 SUBSTRING
只接受一个表达式。我在这里真的只需要一些指导,因为我不是 SQL 专家,所以我一直在用头撞墙试图解决这个问题。我可以毫无问题地弄清楚语法,但也许我不知道存在的某些方法。谢谢
最佳答案
一个通用的解决方案,使用 '_' 的 Charindex
而不对其进行硬编码
declare @s varchar(10) = 'Y_21_CA'
SELECT LEFT(@s, CHARINDEX('_',@s,1)-1) YN,
SUBSTRING(@s, CHARINDEX('_',@s,1)+1,
CHARINDEX('_',@s,CHARINDEX('_',@s,1)) ) Age,
RIGHT(@s, CHARINDEX('_',reverse(@s),1)-1) State
--Results
Y 21 CA
如果您希望在其他查询中经常使用此逻辑,您可以将 SELECT 语句设为内联 TVF。然后你就可以像这样在你的更新中使用它:
UPDATE b
SET YesOrNo = x.YN,
Age = x.Age,
State = x.State
FROM TableB b
INNER JOIN TableA a ON b.ID = a.ID
CROSS APPLY ThreeColumnSplit(a.S) x;
这是一个 "live" demo at SQL Fiddle . (请不要介意它使用 SQL Server 2012 引擎。那只是因为 Fiddle 的 2008 实例目前似乎已关闭且无法使用。脚本中没有任何特定于 SQL Server 2012 的内容。)
关于sql - 将一列中的值解析为另一个表中的多列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14147899/