Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 转换varchar值时转换失败';6276.54';到数据类型int_Sql_Sql Server - Fatal编程技术网

Sql 转换varchar值时转换失败';6276.54';到数据类型int

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

下面的查询一直抛出转换错误。我已经尝试了很多方法,但仍然得到同样的错误。消去过程我现在认为这与硬编码的0.715值有关。我不确定是否或如何强制将其设置为十进制,或者在代码开头设置此集合和变量是否更好

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操作系统和编辑器的限制?但随着时间的推移,我们现在有了花哨的彩色编码编辑器,所以不需要喊关键词:-)