从MS SQL数据库中存储的useragent数据中过滤浏览器信息

时间:2012-10-15 18:37:33

标签: sql-server coldfusion user-agent

我已将访问者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)

是否可以过滤和显示浏览器信息?类似于string包含%MSIE 8.0%然后输出为IE8,如果它包含%Firefox%然后输出为Firefox等等。

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

您可以通过为更多类型的浏览器添加处理代码来改进此功能,甚至可以为GoogleBot等机器人添加处理代码。T-SQL Function: How to parse UserAgent to extract Browser Name

  

在某些情况下,比如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