我在Log解析器中使用case语句来查找浏览器名称,如 case strcnt(cs(user-agent),'MSIE')当1那么'IE'
但是有些用户代理字段有'MSIE'多次,有没有办法检查> = 1
case strcnt(cs(user-agent),'MSIE')当> = 1那么'IE'
或
strcnt(cs(用户代理),'MSIE')> = 1那么'IE'
的情况我尝试了这些语句iis给出了语法错误。
请提供一些其他解决方法来检查多个出现情况.. 感谢
答案 0 :(得分:3)
这就是我的样子......它似乎不支持多个,所以你需要嵌套它们
case strcnt(cs(user-agent), 'iPhone') WHEN 1 THEN 'iPhone' ELSE
case strcnt(cs(user-agent), 'Android') WHEN 1 THEN 'Android' ELSE
case strcnt(cs(user-agent), 'iPad') WHEN 1 THEN 'iPad' ELSE
'Other'
END
END
END
答案 1 :(得分:0)
注意:Log Parser的实际发布版本不支持下面显示的CASE语句表单。 @Gabrielle Guiseppe在评论中提到了这一点。
CASE
语句有两种形式 - 一种只允许你做(你正在使用的那种)和一种允许你使用任何表达式的语句:
SELECT CASE WHEN STRCNT(cs(user-agent), 'MSIE') >=1 THEN 'IE' ELSE 'FOO' END
另请注意在END
声明的...末尾使用CASE
。
另一种选择是:
SELECT CASE WHEN INDEX_OF(cs(user-agent), 'MSIE') IS NOT NULL THEN 'IE' WHEN INDEX_OF(cs(user-agent), 'Google') IS NOT NULL THEN 'CHROME' ELSE 'UNKNOWN' END
答案 2 :(得分:0)
我遇到了同样的问题,但iPhone在用户代理字符串中重复出现。例如:
Mozilla/5.0+(iPhone;+CPU+iPhone+OS+10_2_1+like+Mac+OS+X)+AppleWebKit/602.4.6+(KHTML,+like+Gecko)+Version/10.0+Mobile/14D27+Safari/602.1
我的解决方案是使用REPLACE_IF_NOT_NULL函数,并利用INDEX_OF如果找不到搜索字符串则返回null的事实:
...
case REPLACE_IF_NOT_NULL(INDEX_OF(cs(user-agent),'iPhone'),1) when 1 THEN 'iPhone' else
case REPLACE_IF_NOT_NULL(INDEX_OF(cs(user-agent),'iPad'),1) when 1 THEN 'iPad' else
case REPLACE_IF_NOT_NULL(INDEX_OF(cs(user-agent),'Android'),1) when 1 THEN 'Android' else
...
使用这种格式比使用其他示例中的strcnt(...)构造的等效查询慢了大约10%,但它解决了iPhone问题,我相信它通常更强大。
答案 3 :(得分:-1)
我解决这个问题的方法是在关键字
时使用多个CASE strcnt(TO_LOWERCASE(User-Agent),'mobile') when 1 THEN 'Mobile' when 2 THEN 'Mobile' when 3 THEN 'Mobile' else CASE strcnt(TO_LOWERCASE(User-Agent),'feed') when 1 THEN 'Feed' when 2 THEN 'Feed' when 3 THEN 'Feed' ELSE 'Normal' End End
这涵盖了移动单词出现最多3次。