我已将访问者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等等。
我到处搜寻,找不到任何帮助。
答案 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