3 votes

Filtrez les informations sur le navigateur à partir des données stockées sur les agents utilisateurs dans la base de données MS SQL.

J'ai stocké les visiteurs user_agent dans ma base de données MS-SQL. Chaque ligne a ce format régulier :

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)

Est-il possible de filtrer et d'afficher les informations relatives au navigateur ? Quelque chose comme si la chaîne contient %MSIE 8.0% puis sortie comme IE8, s'il contient %Firefox% puis sortie en tant que Firefox, etc.

J'ai cherché partout et je ne trouve aucune aide.

2voto

LittleBobbyTables Points 17738

Vous pouvez utiliser un CASE pour gérer cela :

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

2voto

James A Mohler Points 3558

Vous pouvez améliorer cette fonction en ajoutant du code de traitement pour d'autres types de navigateurs, ou même pour des robots comme GoogleBot, etc. Fonction T-SQL : Comment analyser UserAgent pour extraire le nom du navigateur ?

Dans certains cas, comme Internet Explorer, c'est assez simple - il suffit de rechercher l'existence d'une expression régulière MSIE 6.0 ou MSIE 8.0. Mais avec d'autres navigateurs, ce n'est pas simple ... Donc, pour chaque navigateur, vous devez utiliser une technique d'extraction différente pour extraire le nom et la version du Nom et version.

La fonction TSQL ressemblerait à ceci :

   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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X