如何删除数据库行中主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
相关产品推荐
相关产品推荐

