Log Parser Case语句

时间:2013-07-24 22:32:26

标签: iis logparser

我在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给出了语法错误。

请提供一些其他解决方法来检查多个出现情况.. 感谢

4 个答案:

答案 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次。