MySQL中CASE语句搭配LIKE匹配user_agent生成新列问题求助
问题原因
- 混用了CASE语句的两种语法:
MySQL支持两种CASE用法,你当前写的是仅支持等值匹配的「简单CASE表达式」,这种写法要求WHEN后只能跟固定的匹配值,不能接LIKE这类模糊匹配运算符。要实现LIKE判断需要使用支持自定义条件的「搜索CASE表达式」,CASE关键字后不需要跟user_agent字段,每个WHEN子句单独写完整的判断逻辑。 - 带空格的别名未转义:你自定义的列别名
Operating System包含空格,属于MySQL中的特殊标识符,必须用反引号包裹才能正常解析,否则会触发语法报错。
修正后的SQL语句
SELECT user_id, CASE WHEN user_agent LIKE '%windows%' THEN 'Windows' WHEN user_agent LIKE '%OS X%' THEN 'Mac' ELSE 'Other' END AS `Operating System` FROM pageviews;
可选优化
如果需要兼容user_agent中的大小写差异(比如出现WINDOWS、os x这类大小写混写的内容),可以统一转成小写后再判断,避免匹配遗漏:
SELECT user_id, CASE WHEN LOWER(user_agent) LIKE '%windows%' THEN 'Windows' WHEN LOWER(user_agent) LIKE '%os x%' THEN 'Mac' ELSE 'Other' END AS `Operating System` FROM pageviews;
内容的提问来源于stack exchange,提问作者user2415706
相关产品推荐
相关产品推荐

