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

如何从nvarchar类型字符串的特定字符间提取姓名、手机号等目标文本

正确实现方案

你现有的写法仅匹配了字符串中第一个-的位置,没有定位到姓名、手机号对应的专属特征标识,因此无法得到正确结果。针对你提供的样本字符串,推荐使用固定语义标识定位的方案,稳定性更强:

方案1:通过结构化字段标识提取(推荐)

样本后半段有固定的User ID:、Name:、Dept:标识,直接基于这些标识截取内容即可:

SELECT
  -- 提取姓名:取User ID:和Name:之间的内容,去除首尾空格
  LTRIM(RTRIM(SUBSTRING(
    col,
    CHARINDEX('User ID:', col) + LEN('User ID:'),
    CHARINDEX('Name:', col) - CHARINDEX('User ID:', col) - LEN('User ID:')
  ))) AS Name,
  -- 提取手机号:取Name:和Dept:之间的内容,去除首尾空格
  LTRIM(RTRIM(SUBSTRING(
    col,
    CHARINDEX('Name:', col) + LEN('Name:'),
    CHARINDEX('Dept:', col) - CHARINDEX('Name:', col) - LEN('Name:')
  ))) AS [Phone Number]
FROM 你的业务表名

方案2:通过分隔符结构提取

如果要基于前半段822-姓名-手机号--的分隔符结构提取,可使用以下写法:

SELECT
  PARSENAME(REPLACE(SUBSTRING(
    col,
    CHARINDEX(',822-', col) + 1,
    CHARINDEX('--', col, CHARINDEX(',822-', col)) - CHARINDEX(',822-', col) -1
  ), '-', '.'), 2) AS Name,
  PARSENAME(REPLACE(SUBSTRING(
    col,
    CHARINDEX(',822-', col) + 1,
    CHARINDEX('--', col, CHARINDEX(',822-', col)) - CHARINDEX(',822-', col) -1
  ), '-', '.'), 1) AS [Phone Number]
FROM 你的业务表名

运行结果

两种方案执行后均可得到目标输出:

NamePhone Number
FName18001233321

注:你示例中的手机号少写了一位数字,若需要截断为9位可在手机号外层加LEFT(xxx,9)处理。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 21:18:03