【问题标题】:extract word from string in sql server [duplicate]从sql server中的字符串中提取单词[重复]
【发布时间】:2017-11-09 23:09:35
【问题描述】:

我需要在 sql server 中提取部分字符串。假设我在一列中有这个字符串......

Name1=Bill Gates&Name2=Microsoft&Address1=The streetadress

如何提取与 Name2 相同的文本,例如 Microsoft?

【问题讨论】:

  • 对于不同行中的所有值,Name1、Name2、Address1 是固定的吗?
  • 是的,它们是固定的......
  • 我的两分钱:如果 OP 表现出努力,这个问题不应该作为重复而关闭。

标签: sql sql-server substring


【解决方案1】:
declare @string varchar(100) = 'Name1=Bill Gates&Name2=Microsoft&Address1=The streetadress'


select replace(PARSENAME (replace(@string, '&', '.'), 2), 'Name2=', '');

【讨论】:

  • 感谢大家的大力帮助!
  • 我喜欢这种使用函数 PARSENAME 的想法,该函数旨在解析 SQL 对象的名称以从字符串中解析出单词。伟大的横向思维和简单:)
  • 请注意它从右到左读取字符串块。如果字符串有不同数量的块,那么这可能会导致问题
【解决方案2】:

一种老式的处理方式是只使用基本的字符串函数,如CHARINDEXSUBSTRING

SELECT
    SUBSTRING(col,
              CHARINDEX('Name2', col) + 6,
              CHARINDEX('&', col, CHARINDEX('Name2', col)) -
                  CHARINDEX('Name2', col) - 6) AS name
FROM yourTable

请注意,此解决方案假定键值对按照您向我们展示的顺序固定。我的查询使用第二个名称后的琥珀色作为终止标记。如果这不存在,例如如果Name2 可能是字符串中的 last 键,则必须更新我的查询。

演示在这里:

Rextester

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-21
    • 2021-09-23
    • 2017-02-04
    • 2011-04-21
    • 1970-01-01
    • 2019-08-06
    • 2019-10-18
    相关资源
    最近更新 更多