首页 >数据库 >mysql教程 >如何从 T-SQL 中的分隔字符串中提取特定数据?

如何从 T-SQL 中的分隔字符串中提取特定数据?

Linda Hamilton
Linda Hamilton原创
2024-12-21 06:50:13749浏览

How to Extract Specific Data from a Delimited String in T-SQL?

如何在 T-SQL 中从分隔字符串中隔离特定数据

在 SQL 世界中,使用字符串有时会带来挑战,特别是当尝试从包含多个数据点的较长字符串中提取特定信息时。让我们探讨一个场景,其中您有一个表,其中有一列包含一个字符串,该字符串包含多个由分隔符分隔的键值对。

问题定义

给定一个表具有以下结构:

Col1 = '123'
Col2 = 'AAAAA'
Col3 = 'Clent ID = 4356hy|Client Name = B B BOB|Client Phone = 667-444-2626|Client Fax = 666-666-0151|Info = INF8888877 -MAC333330554/444400800'

您的目标是仅提取“客户端名称”值,在本例中为是“B B BOB”,来自“Col3”列。分隔键值对的分隔符是“|”管道字符,键值对本身由等号('=')分隔,前导和尾随空格。

解决方案

解决此问题T-SQL 中的问题,您可以采用以下字符串操作技术:

  1. CHARINDEX 和SUBSTRING: 使用 CHARINDEX 函数定位“Client Name”键的起始位置,并从原始字符串中提取相应值的子串。
  2. STUFF: 使用 STUFF 函数在子字符串的开头插入分隔符以将其与其余部分分开字符串。
  3. LTRIM 和 RTRIM: 使用 LTRIM 和 RTRIM 函数从提取的值中删除任何前导或尾随空格。

代码片段

对于您的具体数据,您可以使用以下代码片段来实现期望的结果:

Select col1, col2, LTRIM(RTRIM(SUBSTRING(
    STUFF(col3, CHARINDEX('|', col3,
    PATINDEX('%|Client Name =%', col3) + 14), 1000, ''),
    PATINDEX('%|Client Name =%', col3) + 14, 1000))) col3
from Table01

注意:使用 CHARINDEX 与 PATINDEX 来定位键的起始位置时,您可能会遇到细微的性能差异。然而,这两种方法通常会产生类似的结果,因为它们的效率相当。

以上是如何从 T-SQL 中的分隔字符串中提取特定数据?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn