Sql 转换varchar值时转换失败';6276.54';到数据类型int
下面的查询一直抛出转换错误。我已经尝试了很多方法,但仍然得到同样的错误。消去过程我现在认为这与硬编码的0.715值有关。我不确定是否或如何强制将其设置为十进制,或者在代码开头设置此集合和变量是否更好Sql 转换varchar值时转换失败';6276.54';到数据类型int,sql,sql-server,Sql,Sql Server,下面的查询一直抛出转换错误。我已经尝试了很多方法,但仍然得到同样的错误。消去过程我现在认为这与硬编码的0.715值有关。我不确定是否或如何强制将其设置为十进制,或者在代码开头设置此集合和变量是否更好 SELECT CAST(DATEPART(yyyy, YEAR) as INT) AS YEAR, COUNT(ID) AS ID, SUM(VALUE) AS VALUE, SUM(PREMIUM) AS PREMIUM, SUM
SELECT CAST(DATEPART(yyyy, YEAR) as INT) AS YEAR,
COUNT(ID) AS ID,
SUM(VALUE) AS VALUE,
SUM(PREMIUM) AS PREMIUM,
SUM(try_convert(float,USERID1)) AS VALUE1,
COALESCE(SUM(PREMIUM)/(SUM(try_convert(float,NULLIF(USERID1,0)))*0.715),0) AS 'PROFIT'
SUM(CAST(USERID1 AS float))/SUM(PREMIUM) AS 'PROFIT%'
INTO #YEAR_VALUE
FROM #DATA LT
INNER JOIN dbo.AccountDB P ON LT.ID = P.ID
GROUP BY INCEPTDATE
任何帮助都将不胜感激
提前感谢如前所述,您可能在该列中有一些非数字数据。我尽了我所能从这里收集到的东西来拼凑一个快速的模型,我输入的数据似乎对我有用。只是测试您似乎遇到问题的代码行
USE DB
GO
CREATE TABLE
Test_Table (
Premium decimal,
userID varchar(20)
)
INSERT INTO
Test_Table VALUES
(
2.5, 1
)
USE DB
GO
SELECT COALESCE(SUM(Premium)/(SUM(try_convert(float,NULLIF(userID,0)))*0.715),0) AS 'PROFIT'
FROM Test_Table;
这可能指向一些非数字数据或另一行代码是问题所在。不过,我知道我们的数据和数据类型可能并不完全相同 如果您有一些前后颠倒的逻辑,您需要先尝试解析,然后再执行nullif。Try_parse如果不能转换为指定的类型,则通常返回null。然后需要将null转换为0.0 合并(sum(premium)/(sum(nullif)(try_convert(float,'userId),0.0))*0.715),0.0)为“利润” 此外,如果需要浮点数或小数,则使用0.0表示零
提示:保存您和下一个人的眼睛,无需使用大写。那是在70年代你不能将表示十进制的
varchar
转换成int
。为什么要将数值存储为varchar
?要解决此问题,请修复列的数据类型,并将其更改为具有正确比例和精度的十进制。考虑到您在这里没有到int
的显式转换(除了CAST(DATEPART(yyyy,YEAR)as int)之外,这里不适用于),那么您有一个隐式转换;当您更正数据类型时,这不太可能发生。Hi Larnu,我们收到的数据库中的USERID1字段的结构为varchar(20)。它是客户端用于数字数据的自由文本列。我们无法控制,有没有办法处理?为了隔离问题,请继续删除内容,直到只剩下错误。然后发布该查询。嗨,jarlh,我已经隔离了这个问题,它落在以下行上:客户用于数字数据的COALESCE(SUM(PREMIUM)/(SUM(try_convert(float,NULLIF(USERID1,0))*0.715),0)AS‘PROFIT’。“那么,如果它只包含数字数据,为什么它是一个varchar
?请注意,小写与大写是主观的,而且这可能不是程序员可以控制的。我讨厌SQL关键字必须使用大写,但公司标准要求我这样做。非常感谢您的帮助,这非常有效!注意到大写字母,我已经习惯了,因为正如Paul提到的,我们公司编写的大多数代码都是大写的。只是出于好奇,为什么大写字母被认为是错误的?为什么它曾经被接受(只需注意你70岁的参考)。Thanks@Carlos8070年代的Codd和Date关于SQL的书有大写的关键字,可能是当时IBM操作系统和编辑器的限制?但随着时间的推移,我们现在有了花哨的彩色编码编辑器,所以不需要喊关键词:-)