none
Conversion failed when converting the nvarchar value '734.67' to data type int.

    Pregunta

  • buenas tardes

    alguien me puede ayudar por favor

    me manda error Conversion failed when converting the nvarchar value '734.67' to data type int.

    gracias

    ANEXO CODIGO

    --sql server 2017
    
    
    BEGIN
    CREATE TABLE #TEMPTABLE_2 (importe_OK NVARCHAR (MAX))
    END
    begin
    insert into #TEMPTABLE_2 values(734.67)
    end
    
    BEGIN
    INSERT INTO 
              #TEMPTABLE_2
    SELECT DISTINCT          
    						right(REPLACE(CAST(POWER(10,9) + ROUND(CAST(RIGHT('00000000'+ltrim(str(b.importe_ok,10,3)),10)+(select left('00'+b.importe_ok*100,3)) AS DECIMAL(10,3)),2) AS VARCHAR(20)),'.',''),8)as cadena_importe1
    FROM #TEMPTABLE_2 b 

    viernes, 24 de mayo de 2019 23:19

Respuestas

  • Hola GILBERTO SANTA R:

    Para tú escenario:

    declare @table1 table (concepto char(2),importe decimal (10,2))
    insert into @table1 (concepto,importe)
    values
    ('aa',265.45),('bb',87.97),('cc',115.15),('dd',0.60);
    
    Select cast(importe as decimal(11,3)) as [Le Añadimos Un Decimal],
    Power(10,9)+ Cast(importe as decimal(11,3)) [Le Sumamos Un Numero Inalcanzable],
    cast( Power(10,9) + cast(importe as decimal(11,3)) as varchar(20)) [Conversion A Cadena Numero Inalcanzable],
    replace(cast( Power(10,9) + cast(importe as decimal(11,3)) as varchar(20)),'.','') [Eliminamos Caracter Punto],
    right(replace(cast( Power(10,9) + cast(importe as decimal(11,3)) as varchar(20)),'.',''),8) [Cogemos los 8 caracteres de la derecha]
    
    from @table1
    

    Esto es como se puede hacer, y en cada columna paso por paso, de un modo didáctico.

    Salida

    La solución real es:

    DECLARE @table1 TABLE
    (concepto CHAR(2)
    , importe  DECIMAL(10, 2)
    );
    
    INSERT INTO @table1
    (concepto
    , importe
    )
    VALUES      ('aa', 265.45), ('bb', 87.97), ('cc', 115.15), ('dd', 0.60);
    
    SELECT concepto
    	, RIGHT(replace(CAST(POWER(10, 9) + CAST(importe AS DECIMAL(11, 3)) AS VARCHAR(20)), '.', ''), 8)
    FROM   
    	@table1;

    Salida

    • Propuesto como respuesta Carlos_Ruiz_M martes, 28 de mayo de 2019 13:11
    • Marcado como respuesta GILBERTO SANTA R martes, 28 de mayo de 2019 15:27
    martes, 28 de mayo de 2019 4:11

Todas las respuestas

  • Hola Gilberto Santa R:

    Tu código tiene varios errores, y lo que es más importante, yo al menos, no se lo que quieres que salga de él mismo.

    Declaras una tabla cuya única columna es de tipo Nvarchar(max), pero cuando haces  el insert, le introduces un número. 

    Si quieres introducir en un nvarchar un número, trátalo como nVarchar

    insert into #TEMPTABLE_2 values(N'734.67')

    No entiendo muy bien porque utilizas este tipo de tablas temporales, ni porque pones Begin Sentencia end, begin Sentencia end

    Pero obviando esta segunda parte.

    Esta mál formada la consulta. 

    Pones un disctinct porque supongo que vas a tener más registros repetidos en esta tabla temporal y así te aseguras que solo te salen valores únicos. Si es este el caso, en la pregunta, pon más entradas, para que quien te de la respuesta, tenga todo el escenario completo, y te pueda dar algo que redunde en una mejor calidad de tú código.

    Lo que va después es erróneo y yo no logro interpretar cual es el objetivo.

    Necesita una aclaración

    • Propuesto como respuesta Carlos_Ruiz_M lunes, 27 de mayo de 2019 14:39
    sábado, 25 de mayo de 2019 5:25
  • SI SOLO HAGO 'SELECT' ME MANDA EL MISMO ERROR:

    SELECT DISTINCT          
    right(REPLACE(CAST(POWER(10,9) + ROUND(CAST(RIGHT('00000000'+ltrim(str(b.importe_ok,10,3)),10)+(select left('00'+b.importe_ok*100,3)) AS DECIMAL(10,3)),2) AS VARCHAR(20)),'.',''),8)as cadena_importe1
    FROM #TEMPTABLE_2 b 

    Msg 245, Level 16, State 1, Line 617
    Conversion failed when converting the nvarchar value '734.67' to data type int.

    lunes, 27 de mayo de 2019 18:25
  • Te voy a hacer una pregunta mucho más explicita.

    ¿Cuál es la salida que esperas de esa Select?

    lunes, 27 de mayo de 2019 19:15
  • Mira Javi

    si le descomentas el concepto 'dd' te mandará el error antes mensionado, como le hago para considerar ese tipo de importe, anexo el select.

    declare @table1 table (concepto char(2),importe decimal (10,2))
    insert into @table1 (concepto,importe)
    values
    ('aa',265.45),('bb',87.97),('cc',115.15)--,('dd',0.60);
    
    SELECT DISTINCT          
    CONCEPTO,right(REPLACE(CAST(POWER(10,9) + ROUND(CAST(RIGHT('00000000'+ltrim(str(importe,10,3)),10)+(select left('00'+importe*100,3)) AS DECIMAL(10,3)),2) AS VARCHAR(20)),'.',''),8)as cadena_importe1
    FROM @table1

    lunes, 27 de mayo de 2019 21:32
  • disculpa se me olvido incluir el signo '?'

    si le descomentas el concepto 'dd' te mandará el error antes mensionado, como le hago para considerar ese tipo de importe?, anexo el select.

    lunes, 27 de mayo de 2019 21:34
  • el importe 0.60, así debe quedar: 00000600
    lunes, 27 de mayo de 2019 22:47
  • Hola GILBERTO SANTA R:

    Para tú escenario:

    declare @table1 table (concepto char(2),importe decimal (10,2))
    insert into @table1 (concepto,importe)
    values
    ('aa',265.45),('bb',87.97),('cc',115.15),('dd',0.60);
    
    Select cast(importe as decimal(11,3)) as [Le Añadimos Un Decimal],
    Power(10,9)+ Cast(importe as decimal(11,3)) [Le Sumamos Un Numero Inalcanzable],
    cast( Power(10,9) + cast(importe as decimal(11,3)) as varchar(20)) [Conversion A Cadena Numero Inalcanzable],
    replace(cast( Power(10,9) + cast(importe as decimal(11,3)) as varchar(20)),'.','') [Eliminamos Caracter Punto],
    right(replace(cast( Power(10,9) + cast(importe as decimal(11,3)) as varchar(20)),'.',''),8) [Cogemos los 8 caracteres de la derecha]
    
    from @table1
    

    Esto es como se puede hacer, y en cada columna paso por paso, de un modo didáctico.

    Salida

    La solución real es:

    DECLARE @table1 TABLE
    (concepto CHAR(2)
    , importe  DECIMAL(10, 2)
    );
    
    INSERT INTO @table1
    (concepto
    , importe
    )
    VALUES      ('aa', 265.45), ('bb', 87.97), ('cc', 115.15), ('dd', 0.60);
    
    SELECT concepto
    	, RIGHT(replace(CAST(POWER(10, 9) + CAST(importe AS DECIMAL(11, 3)) AS VARCHAR(20)), '.', ''), 8)
    FROM   
    	@table1;

    Salida

    • Propuesto como respuesta Carlos_Ruiz_M martes, 28 de mayo de 2019 13:11
    • Marcado como respuesta GILBERTO SANTA R martes, 28 de mayo de 2019 15:27
    martes, 28 de mayo de 2019 4:11
  • Muchas Gracias!!
    martes, 28 de mayo de 2019 15:28
  • De nada
    martes, 28 de mayo de 2019 19:17