请求编写Case表达式实现Desc字段的智能分类(忽略大小写与附加内容)
编写CASE表达式实现分类映射
针对你需求中Desc字段存在大小写变化、附加内容的情况,以下是不同数据库环境下的CASE表达式实现方案:
基础模糊匹配方案(兼容多数数据库)
通过LOWER()统一转换为小写,结合LIKE模糊匹配关键词,覆盖大小写差异与前后附加内容:
SELECT No, Desc, CASE WHEN LOWER(Desc) LIKE '%apple%' THEN 'fruit' WHEN LOWER(Desc) LIKE '%tomato%' THEN 'veg' -- 可按需添加更多分类规则 ELSE 'unknown' -- 处理未匹配的兜底情况 END AS Name FROM your_table_name;
正则精准匹配方案(适合支持正则的数据库)
如果需要避免类似pineapple被误判为apple分类的情况,可使用正则匹配关键词开头的内容:
PostgreSQL 版本
SELECT No, Desc, CASE WHEN Desc ~* '^apple' THEN 'fruit' WHEN Desc ~* '^tomato' THEN 'veg' ELSE 'unknown' END AS Name FROM your_table_name;
~*表示不区分大小写的正则匹配,^apple限定匹配以apple开头的内容。
MySQL 版本
SELECT No, Desc, CASE WHEN REGEXP_LIKE(Desc, '^apple', 'i') THEN 'fruit' WHEN REGEXP_LIKE(Desc, '^tomato', 'i') THEN 'veg' ELSE 'unknown' END AS Name FROM your_table_name;
'i'参数启用不区分大小写匹配,^apple限定开头匹配。
SQL Server 版本
SELECT No, [Desc], -- Desc是SQL关键字,需用方括号转义 CASE WHEN [Desc] LIKE 'apple%' COLLATE SQL_Latin1_General_CP1_CI_AS THEN 'fruit' WHEN [Desc] LIKE 'tomato%' COLLATE SQL_Latin1_General_CP1_CI_AS THEN 'veg' ELSE 'unknown' END AS Name FROM your_table_name;
COLLATE指定不区分大小写的排序规则,apple%限定开头匹配。
Oracle 版本
SELECT No, "Desc", -- Oracle中关键字需用双引号转义 CASE WHEN REGEXP_LIKE("Desc", '^apple', 'i') THEN 'fruit' WHEN REGEXP_LIKE("Desc", '^tomato', 'i') THEN 'veg' ELSE 'unknown' END AS Name FROM your_table_name;
'i'参数启用不区分大小写匹配。
注意事项
- CASE表达式会返回第一个匹配的结果,若
Desc可能包含多个关键词,需注意规则的排序顺序。 - 若需严格匹配核心关键词,优先选择正则开头匹配的方案。
内容的提问来源于stack exchange,提问作者Raj
相关产品推荐
相关产品推荐

