none
¿COMO DAR A UNA CONSULTA SQL FORMATO? PUNTO INICIAL Y LONGITUD. RRS feed

  • Pregunta

  • Buenos días,

    actualmente estoy exportando una QUERY SQL y cargandola en un FTP (de manera automática) para que mis clientes se lo descargen en su PROGRAMA DE GESTIÓN.

    Para poder luego parametrizar en su programa de gestión, NECESITO dar a cada campo su posición INICIAL, y su LONGITUD.

    ¿Como puedo hacerlo?

    Gracias

    viernes, 16 de febrero de 2018 8:17

Respuestas

  • Hola:

    Quizá deberías aportar la query.

    O en la select cada campo, le pones un alias y entiendo que la longitud es fija para que el programa pueda captar los datos.

    Por tanto puede ser algo así, como

    SELECT OBSERVACIONES AS DATO, '55' AS LONGITUD_DATO,
    ID AS ENCABEZADO, '87' AS LONGITUD_ENCABEZADO
    FROM MITABLA
    

    A lo mejor es esta vía la que necesitas.

    Un saludo

    viernes, 16 de febrero de 2018 8:44
  • Hola:

    A lo mejor te vale algo como esto.

    Es un poco trampa, pero parece viable, para algo que sea ágil.

    Te he concatenado un - para que observes la longitud real del campo, dado que si extraes mediante la consulta te elimina los espacios.

    Pero puedes ir concatenando cada una de las columnas así, y la ultima anexarle, por ejemplo un retorno de carro.

    select LEN(LEFT( case when LEN(descripcion)<100
    			then
    	 
    			SUBSTRING(descripcion, 1,LEN(DESCRIPCION)) +STR(1.0,1000,1)
    			else
    			SUBSTRING(descripcion, 1,100)
    	
     end,100) + '-') as prueba  
    
     
     from ARTICULOS 

    Saludos

    • Marcado como respuesta Sistemas.Farma martes, 20 de febrero de 2018 11:05
    viernes, 16 de febrero de 2018 15:29

Todas las respuestas

  • Hola:

    Quizá deberías aportar la query.

    O en la select cada campo, le pones un alias y entiendo que la longitud es fija para que el programa pueda captar los datos.

    Por tanto puede ser algo así, como

    SELECT OBSERVACIONES AS DATO, '55' AS LONGITUD_DATO,
    ID AS ENCABEZADO, '87' AS LONGITUD_ENCABEZADO
    FROM MITABLA
    

    A lo mejor es esta vía la que necesitas.

    Un saludo

    viernes, 16 de febrero de 2018 8:44
  • Buenos días,

    lo primero gracias por responder.

    La query en cuestión no la había puesto, por no considerarlo pero la adjunto para poder trabajar mejor.


    use FARMAPARAA3
    SELECT
    LTRIM(RTRIM(SUBSTRING(CODART,0,16))), SUBSTRING(DESCART,0,116) ,
    (SELECT PRECIO  
    FROM TARIFAVE 
    WHERE TARIFAVE.CODART = ARTICULO.CODART and ltrim(tarifave.TARIFA)='TPRO') 
    from dbo.ARTICULO where CODART<'540211' ORDER BY CODART ASC 

    Yo había probado con SUBSTRING, que los parámetros con la posición inicial y la longitud, pero no funciona bien, o yo no lo implemento bien. Digamos que lo que yo quiero conseguir es algo como esto:

    Se cambió el contexto de la base de datos a 'FARMAPARAA3'.
                                                                                                                                                 
    --------------- ---------------------------------------------------------------------------------------------------- ------------------------
    0                    Articulo sin codificar                                                                                               NULL
    000000          VALE 2E                                                                                                                 NULL
    000001          VALE VITALDENT                                                                                                    NULL
    000002          INMUNODEN SENIOR 10 VIALES                                                                            NULL

    Donde yo le indique en que posición del TXT empieza es campo, y que longitud tenga, y que no me saque mas datos que los puros datos, ni info de se cambio el contexto, ni lineas de separación ni nada.

    Lo que me as enviado esta de lujo, pero para mi caso no vale, porque no quiero cabecera!!

    Gracias



    viernes, 16 de febrero de 2018 13:18
  • Hola:

    A lo mejor te vale algo como esto.

    Es un poco trampa, pero parece viable, para algo que sea ágil.

    Te he concatenado un - para que observes la longitud real del campo, dado que si extraes mediante la consulta te elimina los espacios.

    Pero puedes ir concatenando cada una de las columnas así, y la ultima anexarle, por ejemplo un retorno de carro.

    select LEN(LEFT( case when LEN(descripcion)<100
    			then
    	 
    			SUBSTRING(descripcion, 1,LEN(DESCRIPCION)) +STR(1.0,1000,1)
    			else
    			SUBSTRING(descripcion, 1,100)
    	
     end,100) + '-') as prueba  
    
     
     from ARTICULOS 

    Saludos

    • Marcado como respuesta Sistemas.Farma martes, 20 de febrero de 2018 11:05
    viernes, 16 de febrero de 2018 15:29
  • voy a probar por ahi!! muchas gracias por la atención.
    martes, 20 de febrero de 2018 11:05