【问题标题】:Extracting a word from string from n rows and append that word as a new col in SQL Server从 n 行中的字符串中提取一个单词并将该单词作为 SQL Server 中的新列附加
【发布时间】:2018-06-13 01:32:48
【问题描述】:

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

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

问题是我要找的词不一样,而且它们并不总是在同一个位置。

这是我的 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

我希望提取所有以 3C 开头并且长度为 10 个字符的单词,然后将其附加到一个新的列中,因此它看起来像这样:

  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 Server 没有本机正则表达式提取字符串函数,这可能是完成这项工作的最佳工具。如果需要,您可以查看自定义 UDF 的正则表达式。
  • 你试过CHARINDEX吗?

标签: sql sql-server sql-server-2008 tsql ssms


【解决方案1】:

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 ;

【讨论】:

  • 这不是你第一次帮助我!你是真正的绝地大师!
猜你喜欢
  • 1970-01-01
  • 2015-05-08
  • 1970-01-01
  • 1970-01-01
  • 2017-11-09
  • 1970-01-01
  • 1970-01-01
  • 2019-08-08
  • 2019-10-18
相关资源
最近更新 更多