dem*_*srv 2 sql t-sql sql-server sql-server-2008
Microsoft SQL Server 2008
我有两张桌子.其中一列有一个_分隔数据
例:
Y_21_CA
<BR>
such that:
Yes/No_Age_State
Run Code Online (Sandbox Code Playgroud)
我需要解析此列中的数据并将其插入另一个表中,该表具有每个值的单独列.假设表A包含一列,如上例所示,但表B包含三列,YesOrNo, Age, usState.
最简单的方法是什么?我尝试过这样的事情:
UPDATE TableA
SET YesOrNo = SUBSTRING (TableB.Column1, 1, 1)
Run Code Online (Sandbox Code Playgroud)
但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
Run Code Online (Sandbox Code Playgroud)
如果您希望在其他查询中经常使用此逻辑,则可以将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;
Run Code Online (Sandbox Code Playgroud)
这是SQL Fiddle的"实时"演示.(请不要介意它使用SQL Server 2012引擎.这只是因为Fiddle的2008实例目前似乎已关闭而无法使用.脚本中没有特定于SQL Server 2012的内容.)
| 归档时间: |
|
| 查看次数: |
3459 次 |
| 最近记录: |