none
Quitar caracter de consulta RRS feed

  • Pregunta

  • Buenos Días

    Tengo una consulta SQL

      SELECT max([recibo]) as recibo
                                      ,max([No. producto]) as Producto
    				                  ,max([Cod. EAN PAQ])  as EANPAQ
                                      ,max([Cod. EAN UD]) as EANUD
                                      ,max([Descripcion]) as Descripcion
                                      ,max(cast([UD] as int)) as UD
    	                              ,max(cast([PAQ] as int)) as PAQ
    	                              ,max(cast([% descuento] as int)) as Descuento
                                      ,max(convert(decimal (10,3), [Precio venta])) as PrecioVenta
    								  ,max(convert(decimal (10,3), [Importe descuento])) as ImporteDescuento
                                      ,max(convert(decimal (10,3), [Importe s/IVA])) as Importe
                                      ,max(convert(decimal (10,3), [Importe c/IVA])) as ImporteIva
    								   ,max(convert(decimal (10,3), [iva])) as recargo
                                  FROM [MADRIDPAPEL_2016_UP10].[dbo].[000_Lineas facturas venta]
                                 where [recibo] ='18FV007477'
                                 group by [No. producto]

    Que me arroja el siguiente Resultado

    Entonces como puedo hacer para que en mi consulta me quite de la columna EANPAQ los 1 y de los EANUD las U

    es posible?

    saludos


    ruben

    lunes, 16 de abril de 2018 10:49

Respuestas

  • Ahi va Rubén:

       ,CASE WHEN SUBSTRING( CAST (MAX([Cod. EAN PAQ] ) AS VARCHAR(20)),1,1) ='1' 
       /* cogemos el primer caracter de la cadena (MAX([Cod. EAN PAQ] ) */
    			THEN 
    				SUBSTRING( CAST (MAX([Cod. EAN PAQ] ) AS VARCHAR(20)),2,LEN(MAX([Cod. EAN PAQ] ))) /*SI LA EXPRESION ERA BUENA TAL QUE EMPIEZA POR 1 */
    			ELSE  max([Cod. EAN PAQ]) /* LO COGEMOS COMPLETO */
      end  as EANPAQ 
    

    al castear el valor a varchar(20), aunque es posible que ya lo sea, pero por si acaso, solo le puse (1)

    y además inverti la devolución.

    Espero que con esto te quede más claro y resuelto.

    Saludos

    • Marcado como respuesta Ruben Lezcano martes, 17 de abril de 2018 7:48
    lunes, 16 de abril de 2018 17:48

Todas las respuestas

  • Hola Ruben:

    Puedes hacerlo de entre muchas otras maneras, con un case y la función substring

    CASE WHEN SUBSTRING((max([Cod. EAN PAQ]))1,1)='1' THEN (max([Cod. EAN PAQ])) ELSE SUBSTRING((max([Cod. EAN PAQ]))2,LEN(MAX([Cod. EAN PAQ]))  as EANPAQ

    Solo te he colocado un ejemplo de como lo puedes hacer con una columna dado que entiendo que solo quieres quitar el primer caracter en ese caso.

    Tambien con la función IIF, valida desde 2012.

    En el case cuando el primer caracter de tu max sea igual al literal '1' entonces es completo sino recoges todos los caracteres desde la posición 2.

    Siempre partiendo de la base de que siempre tengas caracteres, sino también tendrías que chequearlo.

    Lo mismo puedes hacer para la otra condición, etc. etc.

    Un saludo

    lunes, 16 de abril de 2018 11:12
  • Hola Javi

    He puesto como me has dicho pero me da un error, no se a lomejor lo he puesto mal

    puedes mirarmelo porfa

    saludos


    ruben

    lunes, 16 de abril de 2018 11:30
  • Hola Ruben:

    Puede ser así

    SELECT max([recibo]) as recibo
                                      ,max([No. producto]) as Producto
    				                  ,CASE WHEN SUBSTRING( CAST (MAX([Cod. EAN PAQ] ) AS VARCHAR(1)),1,1) ='1' 
    											THEN max([Cod. EAN PAQ])
    										ELSE SUBSTRING( CAST (MAX([Cod. EAN PAQ] ) AS VARCHAR(1)),2,LEN(MAX([Cod. EAN PAQ] ))) end  as EANPAQ
                                      ,max([Cod. EAN UD]) as EANUD
                                   
                                  FROM [000_Lineas facturas venta]
                                -- where [recibo] ='18FV007477'
                                 group by [No. producto]

    Tienes que repasarlo, porque fijate que te he quitado algunas columnas que yo no tenía, e incluso el where.

    Pero la sintaxis es case when Expresion then Expresion else Expresion end as micolumna

    Lo mismo, haces para la otra y con eso lo tienes resuelto.

    Saludos

    Pd.: Si te cuesta, más tarde te la hago completa.

    lunes, 16 de abril de 2018 12:13
  • Para los

     ,max([Cod. EAN UD]) as EANUD

    Haces otro case identico al anterior, pero el ='1' lo sustityes por = 'U'

    Saludos

    lunes, 16 de abril de 2018 12:21
  • Hola Javi mira el resultado que me da he dejado las dos columnas para que veas la diferencia

    Me quita todo y me deja los que tiene 1 ademas yo solo quieor quitar el 1 de delanta de un numero, es decir si tiene 1 uno se quita ejemplo 1895647  pues yo eso lo remlazo por 895647

    saludos


    ruben

    lunes, 16 de abril de 2018 17:23
  • Ahi va Rubén:

       ,CASE WHEN SUBSTRING( CAST (MAX([Cod. EAN PAQ] ) AS VARCHAR(20)),1,1) ='1' 
       /* cogemos el primer caracter de la cadena (MAX([Cod. EAN PAQ] ) */
    			THEN 
    				SUBSTRING( CAST (MAX([Cod. EAN PAQ] ) AS VARCHAR(20)),2,LEN(MAX([Cod. EAN PAQ] ))) /*SI LA EXPRESION ERA BUENA TAL QUE EMPIEZA POR 1 */
    			ELSE  max([Cod. EAN PAQ]) /* LO COGEMOS COMPLETO */
      end  as EANPAQ 
    

    al castear el valor a varchar(20), aunque es posible que ya lo sea, pero por si acaso, solo le puse (1)

    y además inverti la devolución.

    Espero que con esto te quede más claro y resuelto.

    Saludos

    • Marcado como respuesta Ruben Lezcano martes, 17 de abril de 2018 7:48
    lunes, 16 de abril de 2018 17:48
  • Javi Genio Grande amigo

    Funciona Perfecto

    saludos


    ruben

    martes, 17 de abril de 2018 7:48
  • Buenos Días Chicos 

    Revivo este tema pues tengo un problema que no me surgió antes y es que cuando exporto a excel se me borra los 0 de delante 

    ejemplo

    Ese codigo de barra esta mal lleva un 0 por delante del 7

    Como puedo solucionar?

    Alo mejor enviando todo como texto no como numero, es posible?

    saludos


    ruben

    martes, 24 de abril de 2018 9:52
  • Hola Rubén:

    No es la consulta, es el excel que interpreta los datos como un número, cuando es un tipo carácter.

    Abre otro hilo con la pregunta en el foro de excel, que seguro que te ayudan mejor.

    Si quieres para confirmar lo que te indico, añade un carácter por delante y verás como entoces te los abre genial.

    Saludos

    martes, 24 de abril de 2018 10:10
  • HOla javi y como puedo agregar por ejemplo un espacio a mi consulta

    saludos


    ruben

    martes, 24 de abril de 2018 11:15
  • Hola Ruben:

    select ' ' + CASE WHEN SUBSTRING( CAST (MAX([Cod. EAN PAQ] ) AS VARCHAR(20)),1,1) ='1' 
       /* cogemos el primer caracter de la cadena (MAX([Cod. EAN PAQ] ) */
    			THEN 
    				SUBSTRING( CAST (MAX([Cod. EAN PAQ] ) AS VARCHAR(20)),2,LEN(MAX([Cod. EAN PAQ] ))) /*SI LA EXPRESION ERA BUENA TAL QUE EMPIEZA POR 1 */
    			ELSE  cast(max([Cod. EAN PAQ]) as varchar(20)) /* LO COGEMOS COMPLETO */
      end  as EANPAQ from [000_Lineas facturas venta]

    Solo de la columna.

    Si son varchares con un mas. Por ejemplo

    Saludos

    martes, 24 de abril de 2018 11:40