You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在T-SQL中提取'Eaten by:'后的指定人名内容?

T-SQL提取'Eaten by:'后的人名

解决方案

利用字符串中固定的分界标记(人名后紧跟 Location),结合CHARINDEX和SUBSTRING精准提取目标内容:

-- 测试示例1
DECLARE @string1 NVARCHAR(MAX) = 'Apple: Two days Pear: Three days Banana: One day Eaten by: Smith, John Location 1: First Street Location 2: Second Street'
-- 测试示例2
DECLARE @string2 NVARCHAR(MAX) = 'Pear: Three days Banana: One day Eaten by: Bloggs, Joe Location 1: First Street Location 2: Second Street Location 3: Third Street'

-- 提取逻辑
SELECT 
    SUBSTRING(
        @string1,
        CHARINDEX('Eaten by:', @string1) + LEN('Eaten by: '),
        CHARINDEX(' Location', @string1) - (CHARINDEX('Eaten by:', @string1) + LEN('Eaten by: '))
    ) AS PersonName1,
    SUBSTRING(
        @string2,
        CHARINDEX('Eaten by:', @string2) + LEN('Eaten by: '),
        CHARINDEX(' Location', @string2) - (CHARINDEX('Eaten by:', @string2) + LEN('Eaten by: '))
    ) AS PersonName2

代码说明

  1. 定位人名起始位置:CHARINDEX('Eaten by:', @string)找到标记的起始点,加上LEN('Eaten by: ')(包含标记后的空格),得到人名第一个字符的位置。
  2. 定位人名结束位置:CHARINDEX(' Location', @string)找到人名后固定的分界标记 Location的起始点,减去人名起始位置,得到人名的长度。
  3. 提取目标内容:通过SUBSTRING截取指定区间的字符串,精准获取人名。

原有代码失效原因

你之前的代码通过查找空格确定人名长度,但人名本身包含空格(如Smith, John中的逗号后空格),导致CHARINDEX无法正确识别人名的结束位置,进而提取了多余内容。利用固定的后续标记 Location作为分界点,更符合你描述的“格式间距一致”规则,结果更可靠。

内容的提问来源于stack exchange,提问作者Paulo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 16:40:33