3

我已将访问者的user_agent信息存储在我的 MS-SQL 数据库中。每行都有这种常规格式:

Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; F-6.0SP2-20041109; InfoPath.1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 1.1.4322; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; AskTbORJ/5.14.1.20007)

是否可以过滤和显示浏览器信息?如果字符串包含%MSIE 8.0%则输出为 IE8,如果它包含%Firefox%则输出为 Firefox 等。

我到处搜索,但找不到任何帮助。

4

2 回答 2

2

您可以使用CASE表达式来处理:

SELECT CASE 
    WHEN user_agent LIKE '%MSIE 8.0%' THEN 'IE8'
    WHEN user_agent LIKE '%Firefox%' THEN 'Firefox'
    ELSE 'There are other browsers?'
    END AS Browser
FROM YourTable
于 2012-10-15T18:40:20.900 回答
2

您可以通过为更多类型的浏览器添加处理代码来改进此功能,甚至可以为 GoogleBot 等机器人添加处理代码。T-SQL 功能:如何解析 UserAgent 以提取浏览器名称

在某些情况下,例如 Internet Explorer,这非常简单 - 只需查找常规短语 MSIE 6.0 或 MSIE 8.0 的存在。但是对于其他浏览器,这并不简单......因此对于每个浏览器,您必须使用不同的提取技术来提取正确的浏览器名称和版本。

TSQL 函数如下所示:

   CREATE FUNCTION [dbo].[GetBrowserName](@UserAgent VARCHAR(200))
   RETURNS VARCHAR(30)
   AS
   BEGIN
   DECLARE @BrowserName VARCHAR(30)
   SET @BrowserName = CASE
          WHEN PATINDEX('%MSIE 8.0%',@UserAgent) > 0
                 THEN 'Internet Explorer 8.0'
          WHEN PATINDEX('%MSIE 7.0%',@UserAgent) > 0
                 THEN 'Internet Explorer 7.0'
          WHEN PATINDEX('%MSIE 6.0%',@UserAgent) > 0
                 THEN 'Internet Explorer 6.0'
          WHEN PATINDEX('%MSIE 5.0%',@UserAgent) > 0
                 THEN 'Internet Explorer 5.0'
          WHEN PATINDEX('%Firefox%',@UserAgent) > 0
                 THEN 'Mozilla ' + REPLACE(SUBSTRING(@UserAgent,
                       PATINDEX('%Firefox%',@UserAgent), 100),'/', ' ') 
          WHEN PATINDEX('%Chrome%',@UserAgent) > 0
                 THEN 'Google ' + REPLACE(SUBSTRING(@UserAgent,
                       PATINDEX('%Chrome%',@UserAgent), 
                              PATINDEX('%Safari%',@UserAgent) -
                                     PATINDEX('%Chrome%',@UserAgent)),'/', ' ') 
          WHEN PATINDEX('%Safari%',@UserAgent) > 0
                 THEN 'Safari ' + REPLACE(SUBSTRING(@UserAgent,
                       PATINDEX('%Version%',@UserAgent),
                              PATINDEX('%Safari%',@UserAgent)-
                                     PATINDEX('%Version%',@UserAgent)),'Version/', '')
          WHEN PATINDEX('%Opera%',@UserAgent) > 0
                 THEN REPLACE(SUBSTRING(@UserAgent,
                       PATINDEX('%Opera%',@UserAgent),
                              PATINDEX('%(%',@UserAgent)-2),'/', ' ')
          ELSE
                 'Unknown Browser'
          END
   RETURN(@BrowserName)
   END
于 2012-11-28T21:51:08.710 回答