如何在MSSQL中提取字符串第二个下划线后的所有内容?
提取第二个下划线后的字符串内容
首先明确:LIKE操作符的作用是筛选符合指定模式的行,它本身没法直接提取字符串的特定部分。你之前写的WHERE [Product] LIKE '%_%' escape ''只是筛选包含下划线的行,和提取内容完全不相关。
要提取第二个下划线之后的所有内容,得结合字符串截取函数,不同数据库的写法略有差异:
SQL Server 写法
通过CHARINDEX两次定位下划线的位置,再用SUBSTRING截取后续内容:
SELECT SUBSTRING( [Product], -- 找到第二个下划线的位置,再加1就是要截取的起始位置 CHARINDEX('_', [Product], CHARINDEX('_', [Product]) + 1) + 1, LEN([Product]) -- 截取到字符串末尾 ) AS ExtractedContent FROM YourTableName -- 先筛选出至少包含两个下划线的行,避免报错 WHERE [Product] LIKE '%_%_%'
MySQL 写法
可以用LOCATE定位第二个下划线,再用SUBSTRING截取,或者用更简洁的SUBSTRING_INDEX组合:
方法1:LOCATE + SUBSTRING
SELECT SUBSTRING( [Product], LOCATE('_', [Product], LOCATE('_', [Product]) + 1) + 1 ) AS ExtractedContent FROM YourTableName WHERE [Product] LIKE '%_%_%'
方法2:SUBSTRING_INDEX 组合
SELECT SUBSTRING_INDEX([Product], '_', - (LENGTH([Product]) - LENGTH(REPLACE([Product], '_', '')) - 1)) FROM YourTableName WHERE [Product] LIKE '%_%_%'
如果是其他数据库(比如PostgreSQL),可以用STRPOS替代CHARINDEX/LOCATE,逻辑一致:先找到第二个下划线的位置,再从该位置+1开始截取到末尾。
内容的提问来源于stack exchange,提问作者emrebalci
相关产品推荐
相关产品推荐

