Sql Msg 8114,16级,状态5,第3行:将数据类型nvarchar转换为浮点时出错
我已经这样做了好几天了,尽管我已经尝试了从nvarchar到float的不同数据类型转换,但仍然出现了这个错误。。我无法更新表的数据类型,因为我刚刚使用了数据库Sql Msg 8114,16级,状态5,第3行:将数据类型nvarchar转换为浮点时出错,sql,sql-server,Sql,Sql Server,我已经这样做了好几天了,尽管我已经尝试了从nvarchar到float的不同数据类型转换,但仍然出现了这个错误。。我无法更新表的数据类型,因为我刚刚使用了数据库 SELECT DISTINCT [FIELD1] CODE , 'TPZPC-' + [FIELD30] + '-' + [FIELD2] AS "TP_ID" ,[FIELD30] CUSTOMER_CODE ,[FIELD2] SHIP ,[FIELD4] CUSTOMER_NAME
SELECT DISTINCT
[FIELD1] CODE
, 'TPZPC-' + [FIELD30] + '-' + [FIELD2] AS "TP_ID"
,[FIELD30] CUSTOMER_CODE
,[FIELD2] SHIP
,[FIELD4] CUSTOMER_NAME
,[FIELD7] CUSTOMER_ADDRESS
,[FIELD8] CUSTOMER_ADDRESS2
,[FIELD9]
, B.PROVINCE
, B.CITY
, B.REGION
, B.CUSTOMER_CLASS
,[FIELD14] QUANTITY_ORDERED
, CASE WHEN [FIELD35] =1
THEN [FIELD15] * -1
ELSE [FIELD46]
END AS QUANTITY_SHIPPED
,[FIELD41] SELLING_UOM
, CASE WHEN [FIELD35] =1
THEN [FIELD42] *-1
ELSE [FIELD42]
END AS SALES_AMOUNT
,[FIELD44] PD_CODE
,[FIELD20] DETAILMAN_CODE
, CASE WHEN [FIELD46] LIKE '%-'
THEN -(CAST(REPLACE([FIELD46],'-','') AS FLOAT))
ELSE CAST([FIELD46] AS FLOAT)
END AS FINANCIAL_TRADE_DISCOUNT
, CASE WHEN [FIELD35] =1
THEN [FIELD25] * -1
ELSE [FIELD25]
END AS NET_AMOUNT
,[FIELD51] GROSSSALESVATEX
,B.CUSTOMER_GROUP
,B.COMBINEDNAME
, CASE WHEN [FIELD35] = 2
THEN 0
ELSE ROUND((CAST( [FIELD46] AS FLOAT ) /1.12 ) * [FIELD14],2)
END AS TRADEDISCOUNT
, CASE WHEN [FIELD35] = 2
THEN 0
ELSE ROUND((CAST( [FIELD14]*[FIELD16] AS FLOAT ) /1.12) ,2)
END AS GROSS_SALES_VATEX
FROM DAILYSALES A
LEFT JOIN DIST_CUSTOMERS B
ON 'TP' + [FIELD30] + '-' + [FIELD2] = B.TP_ID
AND A.FIELD30 = B.CUSTOMER_CODE
AND A.FIELD2 = B.SHIP_TO_CODE
AND B.CUSTOMER_GROUP NOT LIKE '%.%'
您需要简化代码以隔离问题。可能是由于一个显式转换。但是,隐式转换也可能出现类似的错误 如果显式转换导致错误,您可以将其替换为
try\u convert()
或try\u cast()
。例如:
TRY_CAST(REPLACE([FIELD46], '-', '') AS FLOAT)
如果要进一步调查,请确定转换失败的位置。对要显式转换的每个列重复此操作:
select x.*
from x -- whatever is the right table
where try_convert(float, field46) is null and field46 is not null
这可能会让问题变得显而易见。或者,您可以使用更简单的查询和示例数据提出新问题。列字段中的值是多少?尝试从值中替换逗号。。类似于“REPLACE([FIELD46],,,,,”)的值是与453-,3-…相反的负数。。我只是先把负号移到前面,然后把它转换成float,这样我就可以处理数据。FIELD46的数据类型是nArchary。当你试图转换成float时,你需要将“-”替换成所有字段!。。例如,line:ROUND((将([FIELD46],'-','')转换为FLOAT)/1.12)尝试使用
CONCAT()
进行连接,而不是+
。此外,您真的想要FLOAT
,这是一种不精确的数据类型吗?十进制
几乎总是更好。