是否有更好的方法来计算结果:
我想要的是30/365 = 0.0821917808的结果,因此我可以在进一步的计算中使用它。在脚本中生成时,我得到零。下面是产生结果的一种方法,但是必须有更好的方法。
任何建议都将受到欢迎。谢谢大家。
CREATE TABLE [dbo].[_DOS_SCORE] (
[SCORE] [DBO].[EXPCURRENCY] DEFAULT ((0.00)),
[YEAR] [DBO].[EXPCURRENCY] DEFAULT ((0.00)),
[RESULT] [DBO].[EXPCURRENCY] DEFAULT ((0.00)),
[LAST_MODIFIED] DATETIME DEFAULT (GETDATE()) )
INSERT INTO [_DOS_SCORE] (SCORE, YEAR)
VALUES
(30,365),
(60,365)
UPDATE [_DOS_SCORE] SET RESULT = SCORE/YEAR
SELECT * FROM [_DOS_SCORE]
答案 0 :(得分:1)
使用数字数据类型
declare @DOS_SCORE as table (SCORE numeric(18,10) default 0, YEAR numeric(18,10) default 0, RESULT numeric(18,10) default 0,LAST_MODIFIED datetime default getdate())
INSERT INTO @DOS_SCORE (SCORE, YEAR)
VALUES
(30,365),
(60,365)
UPDATE @DOS_SCORE SET RESULT = SCORE/YEAR
SELECT * FROM @DOS_SCORE
结果是
SCORE YEAR RESULT LAST_MODIFIED
30.0000000000 365.0000000000 0.0821917808 2018-10-02 10:36:25.943
60.0000000000 365.0000000000 0.1643835616 2018-10-02 10:36:25.943
答案 1 :(得分:1)
步骤1:将列RESULT
的数据类型从类型EXPCURRENCY
更改为适当的decimal(P, S)
数据类型。查看Microsoft SQL Server documentation on decimal precision, scale, and length
P
和S
的含义
(除非您了解使用不精确的数据类型的含义,否则请不要使用float
。对于任何{{1},货币都不适合使用 }数据类型。)
第2步:您可能需要以float
的身份进行计算。这将首先将任何SELECT 1.0 * SCORE / YEAR
的值转换为int
(因为decimal
/ int
的结果也被int
截断了)。
第3步:检查您的数据类型。对于名为int
和EXPCURRENCY
的列,SCORE
似乎是一种非常奇怪的数据类型。
答案 2 :(得分:1)
如果将整数除数除以整数除数,则结果是整数,其结果的任何小数部分都会被截断。
您的参数之一必须是小数。例如:SELECT 30.0 / 365
返回0.082191
。
如果需要将此值存储在字段/属性中,请使用@ErikE并使用DECIMAL(A,B)
数据类型。
答案 3 :(得分:0)
SQL摆弄Money
而不是ExpCurrency
:
http://sqlfiddle.com/#!18/3cf36c/1
- SCORE YEAR RESULT LAST_MODIFIED
- 30 365 0.0821 2018-10-02T00:27:25.893Z
- 60 365 0.1643 2018-10-02T00:27:25.893Z
由于没有太多有关ExpCurrency的信息,所以很难说。