SQL提取无数字分类字段:如何去除分类中的数字与括号内容?
SQL提取分类列纯文本内容解决方案
根据你给出的分类数据特点,需要处理两种干扰内容:开头的数字前缀+空格,以及结尾的(数字)后缀。以下是不同SQL方言的实现方案:
MySQL 方案
使用REGEXP_REPLACE正则替换函数,分两步移除干扰内容,最后用TRIM清理多余空格:
SELECT TRIM( REGEXP_REPLACE( REGEXP_REPLACE(category, '^[0-9]+ ', ''), -- 移除开头连续数字+空格 ' \\([0-9]+\\)$', '' -- 移除结尾的空格+括号数字组合 ) ) AS clean_category FROM your_table;
SQL Server 方案(2017及以上版本)
同样使用正则替换,语法和MySQL略有差异:
SELECT TRIM( REGEXP_REPLACE( REGEXP_REPLACE(category, '^[0-9]+ ', ''), ' \([0-9]+\)$', '' ) ) AS clean_category FROM your_table;
如果是低于2017的版本,可使用字符串处理函数组合实现:
SELECT TRIM( CASE WHEN CHARINDEX('(', category) > 0 THEN LEFT(STUFF(category, 1, ISNULL(NULLIF(CHARINDEX(' ', category), 0), 0), ''), CHARINDEX('(', STUFF(category, 1, ISNULL(NULLIF(CHARINDEX(' ', category), 0), 0), '')) - 1) ELSE STUFF(category, 1, ISNULL(NULLIF(CHARINDEX(' ', category), 0), 0), '') END ) AS clean_category FROM your_table;
PostgreSQL 方案
利用PostgreSQL的正则替换功能:
SELECT TRIM( REGEXP_REPLACE( REGEXP_REPLACE(category, '^[0-9]+ ', '', 'g'), ' \([0-9]+\)$', '', 'g' ) ) AS clean_category FROM your_table;
以上方案会自动处理所有情况:
- 带数字前缀和括号后缀的内容(如
400 optics (421))会被清理为optics - 仅带数字前缀的内容(如
81000 plumbing)会被清理为plumbing - 纯文本内容(如
Accessories)会原样保留
内容的提问来源于stack exchange,提问作者rohit dubey
相关产品推荐
相关产品推荐

