MySQL中如何将LIKE运算符匹配的同类值合并为统一名称返回?
你可以通过CASE条件判断语句实现字段值的统一映射,结合DISTINCT去重即可达到需求,参考实现如下:
SELECT DISTINCT CASE WHEN ostype LIKE '%android%' THEN 'Android' WHEN ostype LIKE '%ios%' OR ostype LIKE '%iOS%' THEN 'iOS' END AS ostype FROM prus WHERE ostype LIKE '%android%' OR ostype LIKE '%ios%' OR ostype LIKE '%iOS%';
如果你的MySQL实例排序规则默认不区分大小写,还可以通过LOWER()函数转小写后匹配,简化判断逻辑,避免重复适配大小写差异:
SELECT DISTINCT CASE WHEN LOWER(ostype) LIKE '%android%' THEN 'Android' WHEN LOWER(ostype) LIKE '%ios%' THEN 'iOS' END AS ostype FROM prus WHERE LOWER(ostype) LIKE '%android%' OR LOWER(ostype) LIKE '%ios%';
逻辑说明
CASE WHEN会逐行匹配ostype的内容,命中对应规则就返回你指定的统一标准化值- 外层的
DISTINCT会对映射后的结果去重,最终仅返回Android、iOS两行结果 - 如果你不需要去重,仅需要对原表所有符合条件的行做
ostype字段值标准化,去掉DISTINCT关键字即可
你也可以用IF嵌套简化写法,逻辑完全一致:
SELECT DISTINCT IF(LOWER(ostype) LIKE '%android%', 'Android', 'iOS') AS ostype FROM prus WHERE LOWER(ostype) LIKE '%android%' OR LOWER(ostype) LIKE '%ios%';
内容的提问来源于stack exchange,提问作者PixieDev
相关产品推荐
相关产品推荐

