从n行中的字符串中提取单词,并将该单词作为SQL Server中的新col附加

问题描述 投票:1回答:1

我有一个包含3列的数据集,有15565个观测值。其中一列已在同一行中有多个单词。

我想要做的是从每一行中提取一个特定的单词并将其附加到一个新列(我将总共有4个cols)

问题是我正在寻找的这个词并不相同,而且它们并不总是在同一个位置。

这是我DS的摘录:

  x    y    z
  -----------------------------------------------------------------------
  1    T    3C00652722 (T558799A)
  2    T    NA >> MSP: T0578836A & 3C03024632
  3    T    T0579010A, 3C03051500, EAET03051496
  4    U    T0023231A > MSP: T0577506A & 3C02808556
  8    U    (T561041A C72/59460)>POPMigr.T576447A,C72/221816*3C00721502

我希望提取所有以3Cand开头的单词是10个字符长,然后将其附加到新的col,所以它看起来像这样:

  x    y    z                                         Ref    
  ----------------------------------------------------------------
  1    T    3C00652722 (T558799A)                     3C00652722 
  2    T    NA >> MSP: T0578836A & 3C03024632         3C03024632
  3    T    T0579010A, 3C03051500, EAET03051496       3C03051500
  4    U    T0023231A > MSP: T0577506A & 3C02808556   3C02808556
  8    U    >POPMigr.T576447A,C72/221816*3C00721502   3C00721502

我已经尝试使用ContainsLikesubstring方法,但它没有给我我想要的结果,因为它基本上找到了具有3C数但但不提取它的行,它只是复制整个单元格并且贴上了Ref专栏。

sql sql-server sql-server-2008 tsql ssms
1个回答
2
投票

SQL Server没有良好的字符串函数,但如果您只想每行提取一个值,这应该足够了:

select t.*,
       left(stuff(col,
                  1,
                  patindex('%3C[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]%', col),
                  ''
                 ), 10)
from t ;
© www.soinside.com 2019 - 2024. All rights reserved.