SQL将两个整数相除,得到一个十进制值错误

SQL将两个整数相除,得到一个十进制值错误,sql,sql-server,asp-classic,Sql,Sql Server,Asp Classic,在SQL语句中,我试图将两个整数(下面代码中的整数1是“abc”,下面代码中的整数2是“xyz”)除以,然后得到一个十进制结果(下面代码中的def)。小数结果的前导字符应仅为1或0,后跟一个小数点和小数点后的3个数字。但是,我的代码始终返回一个不带小数的0 SELECT CONVERT(DECIMAL(4,3), abc/xyz) AS def 这段代码的结果是“0”,而我想要的是“0.001”或“0.963”。我相信它仍然将“def”视为一个整数,而不是十进制 我也尝试在abc和xyz上使用

在SQL语句中,我试图将两个整数(下面代码中的整数1是“abc”,下面代码中的整数2是“xyz”)除以,然后得到一个十进制结果(下面代码中的def)。小数结果的前导字符应仅为1或0,后跟一个小数点和小数点后的3个数字。但是,我的代码始终返回一个不带小数的0

SELECT CONVERT(DECIMAL(4,3), abc/xyz) AS def
这段代码的结果是“0”,而我想要的是“0.001”或“0.963”。我相信它仍然将“def”视为一个整数,而不是十进制

我也尝试在abc和xyz上使用CAST,但它返回相同的结果。我还尝试了以下代码:

SELECT CONVERT(DECIMAL(4,3), abc/xyz) AS CONVERT(DECIMAL(4,3)def)
但是这给了我一个错误,说在单词“CONVERT”附近有语法错误

SELECT CONVERT(DECIMAL(4,3), abc/(xyz * 1.0)) AS def
希望这能奏效

SELECT CONVERT(DECIMAL(4,3), abc/10.0) AS def
  FROM dbo.whatever;

在除法之前转换为十进制,而不是在除法之后。答案格式的转换

SELECT 
  CONVERT( DECIMAL(4,3)
         , ( CONVERT(DECIMAL(10,3), abc) / CONVERT(DECIMAL(10,3), xyz) ) 
         ) AS def

这应该可以做到。还要加上除零检查

 SELECT CONVERT(DECIMAL(4,3), abc) / NULLIF(xyz,0)

然后我得到以下错误-算术溢出错误将int转换为数据类型numeric。这意味着您的初始值大于DECIMAL(4,3)。对不起,我应该问你,而不是从你最初的结果中吸取教训。如果初始字段是整数,那么它们可以是20亿,因此转换为十进制(13,3)。但基本上是转换十进制数(x,3),其中x足够大,可以保存初始整数值。将编辑答案,使其大小足以容纳SQL INT数据类型。谢谢。如果我增加它,那么我会得到值,但它仍然不是我想要的格式。如果我使用十进制(10,3),那么我的一些值如下:0.36,0.3470588235,0,0.1,0.292134831。我希望结果总是有一个小数点,小数点右边正好有3个数字。我也需要对“def”进行转换吗?酷,我们有数据。最初的转换是为了获得正确的数据。所以,是的,如果你想控制输出的格式,那么你也可以通过转换来“格式化”它。使用十进制(4,3)编辑答案,如您最初所用,但如果不够大,可以根据需要进行调整。我们正在接近。现在,显示的小数位数不超过3位,这很好。但如果最后一位小数是0,则0将被删除。因此,当我需要“0.300”时,一些结果返回为“0.3”。我还有一个结果是“1”,我需要“1.000”。我是否必须更改“转换(十进制(4,3)”区域的内容?