Tengo una columna varchar en una tabla que se utiliza para almacenar datos xml. Sí, sé que hay un tipo de datos xml que debería usar, pero creo que esto se configuró antes de que el tipo de datos xml estuviera disponible, por lo que debo usar un varchar por ahora. :)SQL Server xml cadena de análisis en el campo varchar
Los datos almacenados es similar a lo siguiente:
<xml filename="100100_456_484351864768.zip"
event_dt="10/5/2009 11:42:52 AM">
<info user="TestUser" />
</xml>
necesito para analizar el nombre del archivo para obtener los dígitos entre los dos guiones bajos que en este caso sería "456". La primera parte del nombre del archivo "no debería" cambiar de longitud, pero el número del medio lo hará. Necesito una solución que funcione si la primera parte cambia de longitud (usted sabe que cambiará porque "no debería cambiar" siempre parece indicar que cambiará).
Por lo que tengo por ahora, estoy usando XQuery para extraer el nombre de archivo porque calculé que esto es probablemente mejor que la manipulación directa de cadenas. Lancé la cadena a xml para hacer esto, pero no soy un experto en XQuery, por lo que estoy teniendo problemas. Encontré una función para XQuery (substring-before), pero no pude hacer que funcione (ni siquiera estoy seguro de que funcione con SQL Server). Puede haber una función XQuery para hacer esto fácilmente, pero si no lo sé, no lo sé.
Por lo tanto, me sale el nombre de archivo de la tabla con una consulta similar al siguiente:
select CAST(parms as xml).query('data(/xml/@filename)') as p
from Table1
De esta Me asumir que yo sería capaz de jugar esta vuelta a una cadena y luego hacer algunas Instring o Charindex funcionan para descubrir dónde están los caracteres de subrayado, de modo que pueda encapsular todo eso en una función de subcadena para seleccionar la parte que necesito. Sin ir demasiado lejos en esto, estoy bastante seguro de que eventualmente puedo hacerlo de esta manera, pero sé que tiene que haber una manera más fácil. De esta forma se convertiría en un gran campo ilegible en la declaración de SQL que, incluso si lo moviera a una función, sería confuso para tratar de descubrir qué está pasando.
Estoy seguro de que es más fácil que esto ya que parece ser una simple manipulación de cadenas. Quizás alguien pueda señalarme en la dirección correcta. Gracias
¿Qué versión de SQL Server? –
Disculpa, no vi este comentario hasta ahora. Estamos usando SQL Server 2008 ahora. – Dusty