Ali*_*ani 8 sql sql-server user-agent
我有一张如下表:
create table SiteLog (UserAgent nvarchar(255))
insert into SiteLog values 
('Mozilla/5.0 (iPad; CPU OS 9_3_2 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13F69 Safari/601.1'),
('Mozilla/5.0 (Windows NT 6.3; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0'),
('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Safari/537.36 Edge/13.10586'),
('Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36'),
('Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.12 Safari/537.36 OPR/14.0.1116.4') 
UserAgent由navigator.userAgent客户端用户填写.我想将记录分类为以下6个类别:
我尝试这样做如下:
SELECT CASE 
         WHEN Charindex('Firefox', useragent) > 0 THEN 'Firefox' 
         WHEN Charindex('Edge', useragent) > 0 THEN 'Edge' 
         WHEN Charindex('Trident', useragent) > 0 
               OR Charindex('MSIE', useragent) > 0 THEN 'IE' 
         WHEN Charindex('Chrome', useragent) > 0 THEN 'Chrome' 
         WHEN Charindex('Safari', useragent) > 0 THEN 'Safari' 
         ELSE 'Other' 
       END 
FROM   SiteLog 
乍一看,这很容易,但正如您在sqlfiddle中看到的那样,结果不正确,因为最后一条记录已经Chrome分类并且在Chrome类别中进行了分类.我花了太多时间来找出解决方案,但我做不到.
编辑
我不能用
CLR Assembly RegEx Functions
如果有人可以解释这个问题的解决方案,将会非常有帮助.
我对您的预期输出做了一些假设:
SELECT 
    SL.*
    ,a.a + b.b + c.c + d.d + e.e + z.z -- Format as you like
FROM   SiteLog SL
            CROSS APPLY (SELECT CASE WHEN Charindex('Firefox', useragent) > 0 THEN ' Firefox' ELSE '' END) a(a)
            CROSS APPLY (SELECT CASE WHEN Charindex('Edge', useragent) > 0 THEN ' Edge'  ELSE '' END) b(b)
            CROSS APPLY (SELECT CASE WHEN Charindex('Trident', useragent) > 0  OR Charindex('MSIE', useragent) > 0 THEN ' IE' ELSE '' END) c(c)
            CROSS APPLY (SELECT CASE WHEN Charindex('Chrome', useragent) > 0 THEN ' Chrome'  ELSE '' END) d(d)
            CROSS APPLY (SELECT CASE WHEN Charindex('Safari', useragent) > 0 THEN ' Safari'  ELSE '' END) e(e)
            CROSS APPLY (SELECT CASE WHEN a.a + b.b + c.c + d.d + e.e = '' THEN ' Other' ELSE '' END) z(z)
| 归档时间: | 
 | 
| 查看次数: | 649 次 | 
| 最近记录: |