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

如何在SQL Server中按规则提取列中的特定字符?

SQL Server 数据提取解决方案

针对你提出的三个列的提取需求,我来一步步拆解并给出对应的SQL实现,直接用SQL Server内置的字符串函数就能搞定:

需求回顾

  • 列a:提取指定字段中=后的6个字符(这里默认是针对eNodeB Function Name字段的内容)
  • 列b:提取eNodeB Function Name部分中_与,之间的字符
  • 列c:提取Cell Name部分中_与,之间的字符

假设你的原始数据存储在名为your_table的表中,包含一个名为raw_data的字段,每条记录是类似样本的完整字符串(比如eNodeB Function Name=SMD085ML1_CIMANGLID, Local Cell ID=21, ...)。

完整SQL代码

SELECT
    -- 列a:提取eNodeB Function Name中=后的6个字符
    SUBSTRING(raw_data, 
              CHARINDEX('eNodeB Function Name=', raw_data) + LEN('eNodeB Function Name='), 
              6) AS column_a,
    
    -- 列b:提取eNodeB Function Name中_到,之间的字符
    SUBSTRING(raw_data, 
              CHARINDEX('_', raw_data, CHARINDEX('eNodeB Function Name=', raw_data)) + 1,
              CHARINDEX(',', raw_data, CHARINDEX('eNodeB Function Name=', raw_data)) 
              - CHARINDEX('_', raw_data, CHARINDEX('eNodeB Function Name=', raw_data)) 
              - 1) AS column_b,
    
    -- 列c:提取Cell Name中_到,之间的字符(取第一个_到,之间的内容)
    SUBSTRING(raw_data, 
              CHARINDEX('_', raw_data, CHARINDEX('Cell Name=', raw_data)) + 1,
              CHARINDEX(',', raw_data, CHARINDEX('Cell Name=', raw_data)) 
              - CHARINDEX('_', raw_data, CHARINDEX('Cell Name=', raw_data)) 
              - 1) AS column_c
FROM your_table;

代码解释

  1. 列a的实现:

    • 用CHARINDEX定位eNodeB Function Name=的起始位置,加上该字符串的长度,就得到=后面第一个字符的位置
    • 再用SUBSTRING从这个位置开始截取6个字符,正好满足需求
  2. 列b的实现:

    • 先定位eNodeB Function Name=的位置,以此为起点找第一个_的位置
    • 再从同样的起点找后面第一个,的位置
    • 用,的位置减去_的位置再减1,得到需要截取的长度,最后用SUBSTRING提取中间的内容
  3. 列c的实现:

    • 逻辑和列b完全一致,只是把定位的起点换成Cell Name=,这样就会提取Cell Name部分中_到,之间的内容

样本数据测试

拿你提供的第一条样本数据:

eNodeB Function Name=SMD085ML1_CIMANGLID, Local Cell ID=21, Cell Name=C_SMD085ML1_CIMANGLIDML2, eNodeB ID=160085, Cell FDD TDD indication=CELL_FDD

执行SQL后得到的结果是:

  • column_a: SMD085
  • column_b: CIMANGLID
  • column_c: SMD085ML1_CIMANGLIDML2

如果你的列c需要提取最后一个_到,之间的内容(比如样本中Cell Name的ML2),可以调整列c的代码为:

SUBSTRING(raw_data, 
          -- 定位最后一个_的位置
          LEN(raw_data) - CHARINDEX('_', REVERSE(raw_data), CHARINDEX(',', REVERSE(raw_data)) + 1) + 2,
          -- 计算截取长度
          CHARINDEX(',', raw_data, CHARINDEX('Cell Name=', raw_data)) 
          - (LEN(raw_data) - CHARINDEX('_', REVERSE(raw_data), CHARINDEX(',', REVERSE(raw_data)) + 1) + 2) 
          - 1) AS column_c

这样针对第一条样本,列c会得到ML2。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:38:26