gpt4 book ai didi

SQL Server从navigator.userAgent检测其他浏览器

转载 作者:行者123 更新时间:2023-12-02 13:51:36 25 4
gpt4 key购买 nike

我有一个如下表:

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')

UserAgentnavigator.userAgent 客户端用户填充。我想将记录分为 6 个类别,如下所示:

  1. 火狐
  2. 边缘
  3. IE
  4. Chrome
  5. Safari
  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 类别。我花了太多时间来找出解决方案,但我做不到。

编辑

I can't use CLR Assembly RegEx Functions

如果有人能够解释此问题的解决方案,将会非常有帮助。

最佳答案

您的问题的技术答案是,在 SQL case 语句中,第一个命中 true 的响应会逃脱其余的条件检查。您可以按照从最严格到最不严格的顺序检查条件,然后您将能够获得您想要的输出。

但是,这并不是一个很好的解决方案。用户代理不可靠或不可预测 - 而且还有很多 https://udger.com/resources/ua-list .

您还有另一个问题,即您正在字符串中间进行搜索。这将使该查询非常昂贵,并且一旦您达到大量记录,查询就会非常慢。

最好在插入记录时解析用户代理,以便在进行搜索/计数时,可以优化它以使用索引。

关于SQL Server从navigator.userAgent检测其他浏览器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50487055/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com