viernes, 16 de diciembre de 2011

SQL Server SubString y RegExp


Entre mis tareas diarias me toco realizar un match entre información de diferentes archivos de log, para facilitar un poco el asunto decidí convertir todo a csv y cargarlo en mi instancia local de SQL Server.

algunos de los campos que eran importantes para el proceso que estaba realizando estaban incluidos como parámetros en el QueryString de la request, por lo que me encontré con la necesidad de dividir un string, según un patrón

por decir algo el query string de ejemplo

showMap.aspx?id=123456&source=algo&destination=otracosa

la funcion PATINDEX del TSQL te permite obtener la posicion de un patron dentro de una cadena y esto combinado con la funcion SUBSTRING me permitieron tomar solo las partes del campo sin depender de una posición inicial fija, eso si, tuve que depender de una longitud fija, pero con un poco mas de trabajo se puede determinar la posición final también utilizando PATINDEX.

por ejemplo, usando patindex para encontrar la posicion inicial del texto "source=" sumando 7 (que es la longitud de source=), y tomando 5 caracteres que seria la longitud del campo source.


SELECT     id,
substring(cs-uri-query, patindex("source=",cs-uri-query) + 7 ,5) as source
from logs