Comment enlever Queryssortingng d'un champ dans T-SQL?

J'ai une table SQL pleine de journaux qui montre le time de réponse de mes pages. Par exemple:

/MyPage1.aspx /MyPage2.aspx /MyPage3.aspx?index=4 /MyPage3.aspx?index=5 /MyPage3.aspx?index=7 

Cependant, je veux créer une vue qui me montre le time de chargement moyen pour chaque page. Pour ce faire, je ne veux pas que les strings de requête soient incluses car je veux juste grouper les pages par leur URL avant le point d'interrogation (donc /MyPage3.aspx ne /MyPage3.aspx qu'une seule fois).

Quelles sont les fonctions de string appropriées pour supprimer la string de requête?

La partie délicate ici est …. datatables ne include pas toujours un? marque. Vous pouvez find la position de la? en utilisant le charindex, mais pour sélectionner datatables à sa gauche, vous devez utiliser CharIndex – 1. Si le? est introuvable, CharIndex renvoie 0 et Left (données, 0-1) génère une erreur.

La solution simple est de s'assurer qu'il y a toujours quelque chose à find pour le CharIndex. Comme ça:

 Select Left(URL, CharIndex('?', URL + '?')-1) From @Temp 

Notez que je fais CharIndex d'URL + '?'. Si datatables ne contiennent pas de point d'interrogation, la fonction charindex renvoie une valeur 1 supérieure à la longueur de la string qui fonctionne bien pour la fonction gauche.

 SELECT CASE WHEN CHARINDEX('?', url) > 0 THEN SUBSTRING(Url, 1, CHARINDEX('?', url) - 1) ELSE Url End As PageOnly FROM TableName 

Cela vous donnera toutes les URL uniques, et le nombre de fois que chacun a été connecté.

 select UrlOnly, COUNT(*) as CountTimes from ( select case when URL like '%?%' then STUFF(URL, charindex('?',URL), LEN(URL), '') else URL end as UrlOnly from tbl ) X group by UrlOnly 

Vous voudrez utiliser SUBSTRING en conjonction avec les fonctions CHARINDEX, donc votre requête SQL ressemblera à quelque chose comme

 SELECT SUBSTRING([PageColName], 0, CHARINDEX('?', [PageColName])) AS 'Page', LoadTime FROM [TableName] 

Remplacer [PageColName] avec le nom de votre colonne qui a les pages, ainsi que [TableName] avec le nom de la table que vous interrogez et vous devez être défini.

Quelque chose comme ça

LEFT (fieldName, CHARINDEX ('.aspx', fieldName) + 5)

Vous n'avez pas besoin de l'instruction IF puisque votre exemple chaque URL a une extension ASPX.