none
select que me devuelva solo digitos RRS feed

  • Pregunta

  • saludos,tengo una columna que me devuelva datos asi en sql 

    632-2 *
    711-2 *
    712-2 *
    801-2
    802-2
    90S-2
     90L1-2
     90L2-2
     100L-2

    de que forma puedo hacer una query que me retorne solo los primeros dos digitos cuando hay tres digitos juntos y de ahi sigue el guion ó los digitos compeltos antes de que le siga una letra a los digitos, beuno este ería el resultado esperadod e lso datos de arriba

    63
    71
    71
    80
    80
    90
     90
     90
     100

    gracias

    viernes, 9 de septiembre de 2016 19:54

Respuestas

  • creo que falta ponerle ltrim(rtrim(campo
    Ah, puede ser. Fíjate en donde te dije "...o un carácter no visible entre medias...". Desde luego, los espacios en blanco (que se quitan con el ltrim) contarían como "caracteres no visibles" a estos efectos. En consecuencia procede que apliques lo de "afinas lo que sea necesario" (es decir, poner el LTrim). El RTrim creo que sobra.
    sábado, 10 de septiembre de 2016 7:07

Todas las respuestas

  • Puedes hacer algo parecido a esto:

    select case when campo like '[0-9][0-9][0-9]-%' then left(campo,2)
                when campo like '[0-9][0-9][0-9]%' then left(campo,3)
                else left(campo,2) end as Campo
    from laTabla

    viernes, 9 de septiembre de 2016 20:08
  • Puedes hacer algo parecido a esto:

    select case when campo like '[0-9][0-9][0-9]-%' then left(campo,2)
                when campo like '[0-9][0-9][0-9]%' then left(campo,3)
                else left(campo,2) end as Campo
    from laTabla

    hola gracias , me falla en este caso

     100L-2 

    solo sale

    1

    viernes, 9 de septiembre de 2016 21:26
  • Lo acabo de probar escribiendo lo siguiente en SSMS y ejecutando la consulta:

    declare @campo nvarchar(10) = '100L-2'
    select case when @campo like '[0-9][0-9][0-9]-%' then left(@campo,2)
                when @campo like '[0-9][0-9][0-9]%' then left(@campo,3)
                else left(@campo,2) end as Campo

    Y sale correctamente 100 como resultado.

    Revisa bien el dato, a ver si es que tienes (por ejemplo) una o en lugar de un cero, o un carácter no visible entre medias. En cualquier caso, no puede salir "1", porque los tres casos del "case" tienen un "left" que devuelve 2 o 3 caracteres, no hay ninguno que devuelva un solo carácter.

    Y si a pesar de todo no funciona, pues corriges lo que haga falta en la sentencia. Por eso puse "algo parecido a" al darte la respuesta: no se trata de que lo copies exacta y literalmente, sino de que te sirva de inspiración para hacerte a la idea de qué vía podría seguirse para conseguir el resultado deseado. A partir de ella, ya reajustas y afinas lo que sea necesario para que satisfaga todos los casos que se te presenten.

    viernes, 9 de septiembre de 2016 21:42
  • a mi no me sale igual

    el campo es un varchar de 20

    creo que falta ponerle ltrim(rtrim(campo
    viernes, 9 de septiembre de 2016 21:47
  • creo que falta ponerle ltrim(rtrim(campo
    Ah, puede ser. Fíjate en donde te dije "...o un carácter no visible entre medias...". Desde luego, los espacios en blanco (que se quitan con el ltrim) contarían como "caracteres no visibles" a estos efectos. En consecuencia procede que apliques lo de "afinas lo que sea necesario" (es decir, poner el LTrim). El RTrim creo que sobra.
    sábado, 10 de septiembre de 2016 7:07