none
USO DE :LTRIM(RTRIM(REPLACE RRS feed

  • Pregunta

  • Hola buenos días:

    de un campo de nombre campo1 y de la tabla mytable

    necesito extraer la informacion, la informacion del campo1, viene así:

    posición: 1|2|3|4|5|6|7|

                  C F 1  0 0 0 2  --> 7 CARACTERES, A PARTIR DE LA POSICION 1

                        E  0 2 0 1 --> 5 CARACTERES, A PARTIR DE LA POSICION  3

                     A 2  1 0 2 3 -->  6 CARACTERES, A PARTIR DE LA POSICION  2

    SON 2000 REGISTROS

    GRACIAS POR SU AYUDA.

    miércoles, 19 de julio de 2017 15:26

Respuestas

  • ¿Podrías adjuntarnos valores "reales"?, el error se produce porque el formato de los valores existentes en tu tabla discrepan con el formato que nos adjuntaste inicialmente y que yo tomo para hacer la consulta, fíjate:

    DECLARE @mytable table (campo1 varchar(100))
    INSERT INTO @mytable VALUES 
        ('AAAACF10002CCCCC'), ('AAAAAAE0201CCCCC'), ('AAAAAA21023CCCCC')
    
    SELECT
        SUBSTRING(t.campo1, PATINDEX('%[A-Z][0-9]%', t.campo1), 
    	   PATINDEX('%[0-9][A-Z]%', t.campo1) - (PATINDEX('%[A-Z][0-9]%', t.campo1) - 1)) Campo1
    FROM
        @mytable t


    Agrega a la lista valores reales, y para cada caso que discrepe con el valor esperado detalla el criterio para recuperar la subcadena.


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Marcado como respuesta Moderador M martes, 25 de julio de 2017 21:11
    miércoles, 19 de julio de 2017 19:20

Todas las respuestas

  • Para recuperar parte de una cadena especificando el inicio y longitud puedes utilizar la función SUBSTRING(expression, start, length)

    SUBSTRING (Transact-SQL)


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    miércoles, 19 de julio de 2017 15:39
  • DISCULPEN SE ME OLVIDO COMENTAR QUE ESE CAMPO VIENE ASI:

    AAAACF10002CCCCC

    AAAAAAE0201CCCCC

    AAAAAA21023CCCCC

    miércoles, 19 de julio de 2017 16:11
  • Intenta con la siguiente consulta:

    SELECT
        SUBSTRING(t.campo1, PATINDEX('%[A-Z][0-9]%', t.campo1), 
    	   PATINDEX('%[0-9][A-Z]%', t.campo1) - (PATINDEX('%[A-Z][0-9]%', t.campo1) - 1)) Campo1
    FROM
        mytable t

    - ¿El prefijo A y el sufijo Z son valores constantes?, en la consulta asumo que no, de serlo sería simple reemplazar el prefijo y sufijo por una cadena de longitud cero.

    Coméntanos los resultados.


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    miércoles, 19 de julio de 2017 16:57
  • manda este error

    Invalid length parameter passed to the LEFT or SUBSTRING function

    miércoles, 19 de julio de 2017 17:22
  • ¿Podrías adjuntarnos valores "reales"?, el error se produce porque el formato de los valores existentes en tu tabla discrepan con el formato que nos adjuntaste inicialmente y que yo tomo para hacer la consulta, fíjate:

    DECLARE @mytable table (campo1 varchar(100))
    INSERT INTO @mytable VALUES 
        ('AAAACF10002CCCCC'), ('AAAAAAE0201CCCCC'), ('AAAAAA21023CCCCC')
    
    SELECT
        SUBSTRING(t.campo1, PATINDEX('%[A-Z][0-9]%', t.campo1), 
    	   PATINDEX('%[0-9][A-Z]%', t.campo1) - (PATINDEX('%[A-Z][0-9]%', t.campo1) - 1)) Campo1
    FROM
        @mytable t


    Agrega a la lista valores reales, y para cada caso que discrepe con el valor esperado detalla el criterio para recuperar la subcadena.


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Marcado como respuesta Moderador M martes, 25 de julio de 2017 21:11
    miércoles, 19 de julio de 2017 19:20