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')
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
乍一看,这很容易,但正如您在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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
649 次 |
| 最近记录: |