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

如何删除数据库行中主ID前缀后5字符之后的所有内容?

解决方案

核心思路是定位到主ID前缀(I0/N0/Q0)的起始位置,然后截取从字符串开头到该前缀后第5个字符的全部内容。以下是主流数据库的实现方式:

MySQL/MariaDB

使用正则匹配函数定位前缀位置,再截取目标内容:

SELECT 
  SUBSTRING(your_column, 1, REGEXP_INSTR(your_column, '(I0|N0|Q0)') + 6) AS trimmed_content
FROM your_table;
  • REGEXP_INSTR 返回第一个匹配I0/N0/Q0的起始位置(1-based索引)
  • 加6是因为前缀占2字符,后续需要保留5字符,总计7位(起始位置+6刚好覆盖完整主ID)

SQL Server

利用PATINDEX匹配前缀模式:

SELECT 
  SUBSTRING(your_column, 1, PATINDEX('%[INQ]0%', your_column) + 6) AS trimmed_content
FROM your_table;
  • %[INQ]0% 是通配符模式,可匹配I0/N0/Q0任意一种前缀

PostgreSQL

提供两种实现方式,适配不同版本需求:

方式1:正则定位

SELECT 
  SUBSTRING(your_column FROM 1 FOR REGEXP_POSITION(your_column, '(I0|N0|Q0)') + 6) AS trimmed_content
FROM your_table;

方式2:多条件判断(兼容低版本)

SELECT 
  SUBSTRING(your_column, 1, 
    CASE 
      WHEN STRPOS(your_column, 'I0') > 0 THEN STRPOS(your_column, 'I0') + 6
      WHEN STRPOS(your_column, 'N0') > 0 THEN STRPOS(your_column, 'N0') + 6
      WHEN STRPOS(your_column, 'Q0') > 0 THEN STRPOS(your_column, 'Q0') + 6
    END
  ) AS trimmed_content
FROM your_table;

这种方法不依赖固定分隔符(比如-),即使行结构不规范,只要包含目标前缀和后续5字符,就能准确截取所需内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 22:20:08