none
consulta SQL extrar valores de cadena RRS feed

  • Pregunta

  • ayuda por favor, necesito extraer en sql server, de esta cadena
    httpsÑ--verificacfdi.facturaelectronica.sat.gob.mx-default.aspx_id¿907DA6BC'21DE'4F95'ACF4'B0901ED6CA95/re¿SDI951114GZ3/rr¿MPU011031AN1/tt¿300.00/fe¿p9y83w¿¿

    valores como
    ID=907DA6BC-21DE-4F95-ACF4-B0901ED6CA95
    RFCreceptor=SDI951114GZ3
    RFCemisor=MPU011031AN1
    asi quedarían las variables para guardar esos valores de la cadena,
    que codigo podria usar para separa esa cadena
    saludos y gracias
    sábado, 10 de noviembre de 2018 18:14

Respuestas

  • La cadena tiene toda la pinta como si alguien hubiera pulsado las teclas en un teclado inglés pero con el teclado configurado en español. Por ejemplo, mirando "httpsÑ--" y sabiendo que en el teclado inglés los dos puntos están donde el español tiene la Ñ, y la / está donde en español tenemos el guión, presumimos que en realidad se esperaba "Https://", y lo mismo el resto de la cadena.

    Pero si la cadena está ya salvada en SQL Server no podemos hacer nada para resolver la configuración del teclado. No habrá más remedio que sustituir los caracteres uno por uno conociendo cuál es su equivalencia. Por ejemplo, en SQL 2017 se puede hacer esto:

    SELECT TRANSLATE(laCadena, 'Ñ-''', ':/-');

    Agregando, como es lógico el resto de los caracteres que se quiera sustituir.

    Si el SQL es más antiguo, no existe la función TRANSLATE. Se puede usar en su lugar un REPLACE(REPLACE(REPLACE(...))).

    https://docs.microsoft.com/en-us/sql/t-sql/functions/translate-transact-sql?view=sql-server-2017

    https://docs.microsoft.com/en-us/sql/t-sql/functions/replace-transact-sql?view=sql-server-2017

    Una vez que ya hayamos arreglado la cadena, el siguiente paso es trocearla conforme indicas. Aunque se puede hacer en SQL, no es nada sencillo a no ser que las longitudes de todos los datos sean fijas. Si son fijas, puedes simplemente usar SUBSTRING para recortar cada segmento indicando la posición en la que aparece y la longitud que tiene.

    https://docs.microsoft.com/en-us/sql/t-sql/functions/substring-transact-sql?view=sql-server-2017

    Pero si las longitudes son variables, se vuelve de una complejidad considerable dadas las limitaciones del lenguaje SQL. En ese caso yo recomendaría más bien hacerlo desde el código cliente. No has dicho qué clase de código va a consultar esos datos, pero si es .NET se puede usar una expresión regular (clase Regex). Habría que conocer en más detalle qué es lo que se necesita y en qué lugar y cómo para poder aportar un ejemplo más concreto.


    sábado, 10 de noviembre de 2018 20:38