如何在SQL中复刻Excel IF嵌套SEARCH字符查找判断功能
需求说明
现有存储创意名称的数据集,需要根据名称中的关键词匹配对应资产类型,原逻辑通过Excel嵌套IF实现,规则如下(和ExcelSEARCH函数逻辑一致,不区分大小写、按优先级顺序匹配):
- 创意名称包含关键词
MV时,返回Motion - 不满足上一条件、名称包含关键词
GIF时,返回GIF - 两个关键词均未匹配时,返回
0
等价SQL写法
SQL中用CASE WHEN语句即可实现完全一致的顺序判断逻辑:CASE WHEN按书写顺序从上到下匹配,命中第一个符合条件的分支后就会返回对应值,和Excel嵌套IF的执行逻辑完全相同。
通用兼容写法(适配绝大多数数据库)
用全数据库兼容的LIKE模糊匹配实现,注意把示例里的字段名、表名替换成你实际业务里的名称即可:
SELECT -- 替换成你需要查询的其他业务字段 creative_name, CASE WHEN creative_name LIKE '%MV%' THEN 'Motion' WHEN creative_name LIKE '%GIF%' THEN 'GIF' ELSE '0' END AS asset_detail FROM your_creative_table;
注意:如果你的数据库配置默认大小写敏感,会导致匹配不到小写的
mv/gif,可以先把字段统一转成小写再匹配,比如把判断条件改成WHEN LOWER(creative_name) LIKE '%mv%' THEN 'Motion',即可和Excel的不区分大小写匹配行为完全对齐。
各数据库专属简化写法
如果需要用数据库内置的子串判断函数提升性能,可以参考对应写法:
- MySQL:
WHEN INSTR(creative_name, 'MV') > 0 THEN 'Motion' - PostgreSQL:
WHEN creative_name ILIKE '%MV%' THEN 'Motion'(ILIKE为PG专属的不区分大小写模糊匹配语法) - SQL Server:
WHEN CHARINDEX('MV', creative_name) > 0 THEN 'Motion'
内容的提问来源于stack exchange,提问作者charan kumar
相关产品推荐
相关产品推荐

