Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.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将十进制数(18,4)乘以十进制数(3,2)返回十进制数(18,4)_Sql_Sql Server_Sql Server 2008 - Fatal编程技术网

SQL将十进制数(18,4)乘以十进制数(3,2)返回十进制数(18,4)

SQL将十进制数(18,4)乘以十进制数(3,2)返回十进制数(18,4),sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我看到很多人的帖子都有类似的问题,但我尝试了他们所有的解决方案,没有一个对我有效。希望你们能指出我的错误 SQL SELECT --Raw Values Hours, --RESULT: 24.0000 StartStops, --RESULT: 0.0000 --Equation without CAST/ROUND ((Hours * 1.00)) AS "WhatIf Hours", --RESULT: 24.000000 ((StartS

我看到很多人的帖子都有类似的问题,但我尝试了他们所有的解决方案,没有一个对我有效。希望你们能指出我的错误

SQL

SELECT
    --Raw Values
    Hours, --RESULT: 24.0000
    StartStops, --RESULT: 0.0000

    --Equation without CAST/ROUND
    ((Hours * 1.00)) AS "WhatIf Hours", --RESULT: 24.000000
    ((StartStops * 1.00)) AS "WhatIf Starts", --RESULT: 0.000000

    --CAST output of equation
    CAST((Hours * 1.00) as DECIMAL(18,4)) AS "WhatIf Hours", --RESULT: Arithmetic overflow error converting numeric to data type numeric.
    CAST((StartStops * 1.00) as DECIMAL(18,4)) AS "WhatIf Starts", --RESULT: Arithmetic overflow error converting numeric to data type numeric.

    --CAST each input of equation
    CAST(Hours as DECIMAL(18,4)) * CAST(1.00 as decimal(18,4)) AS "WhatIf Hours", --RESULT: 24.00000000
    CAST(StartStops as DECIMAL(18,4)) * CAST(1.00 AS decimal(18,4)) AS "WhatIf Starts", --RESULT: 0.00000000

    --ROUND output of equation
    ROUND((Hours * 1.00), 4) AS "WhatIf Hours", --RESULT: 24.000000
    ROUND((StartStops * 1.00), 4) AS "WhatIf Starts" --RESULT: 0.000000
FROM
   MyTable
WHERE
   ID = 1
期望的结果将是算术输出为
DECIMAL(18,4)
,因为这是I列将用值更新的类型。有人能帮忙吗

更新:创建表格

CREATE TABLE [dbo].[MyTable](
   [ID] [int] NOT NULL, 
   [Hours] [decimal](18, 4) NULL,
   [StartStops] [decimal](18, 4) NULL,
   [Updated] [datetime] NULL,
   [UpdatedBy] [varchar](50) NULL,  
) ON [PRIMARY]
更新2

这张照片让你们知道我没疯

试试看

 CAST((ROUND(Hours * 1.00, 4)) as DECIMAL(18,4)) AS "WhatIf Hours"
您正在获得算术溢出,因为您试图将小数点后6位的小数转换为小数点后4位的小数。先把它四舍五入到4位就可以了

你也可以这样做

CAST((CAST(Hours as DECIMAL(18,4)) * CAST(1.00 as DECIMAL(18,4))) as DECIMAL(18,4))
试一试

您正在获得算术溢出,因为您试图将小数点后6位的小数转换为小数点后4位的小数。先把它四舍五入到4位就可以了

你也可以这样做

CAST((CAST(Hours as DECIMAL(18,4)) * CAST(1.00 as DECIMAL(18,4))) as DECIMAL(18,4))

问题可能出在您的设置中。请参见以下示例:

运行:

将数字\u ROUNDABORT设置为打开
声明@num decimal(18,4)=24.0000
选择cast(@num*1.00)作为十进制(18,4))

导致将数值转换为数据类型数值时出现算术溢出错误。然而,运行

设置数值\u ROUNDABORT关闭
声明@num decimal(18,4)=24.0000
选择cast(@num*1.00)作为十进制(18,4))

给出
24.0000

根据官方MSN文档(),您可以运行以下代码:

DECLARE@NUMERIC_ROUNDABORT VARCHAR(3)=“OFF”;
如果((8192&@@OPTIONS)=8192)设置@NUMERIC_ROUNDABORT='ON';
选择@NUMERIC\u ROUNDABORT作为NUMERIC\u ROUNDABORT


检查您的系统设置。

问题可能出在您的设置中。请参见以下示例:

运行:

将数字\u ROUNDABORT设置为打开
声明@num decimal(18,4)=24.0000
选择cast(@num*1.00)作为十进制(18,4))

导致将数值转换为数据类型数值时出现算术溢出错误。然而,运行

设置数值\u ROUNDABORT关闭
声明@num decimal(18,4)=24.0000
选择cast(@num*1.00)作为十进制(18,4))

给出
24.0000

根据官方MSN文档(),您可以运行以下代码:

DECLARE@NUMERIC_ROUNDABORT VARCHAR(3)=“OFF”;
如果((8192&@@OPTIONS)=8192)设置@NUMERIC_ROUNDABORT='ON';
选择@NUMERIC\u ROUNDABORT作为NUMERIC\u ROUNDABORT


检查您的系统设置。

什么是
hours
startstops
列的数据类型?已添加创建表。您在查询中为什么不将所有内容都转换为十进制(18,4)?如果您已经尝试过了,会发生什么?请参阅查询的第6行。我试图转换算术的输出,但得到了一个溢出错误。你的意思是把方程的每一部分都投进去吗?我无法复制。1) 你的创造。2)
将值(1,24.0,0,GETDATE(),“”)插入dbo.MyTable(ID,Hours,startstop,Updated,UpdatedBy)
3)您可以选择。如果问题在于不同的乘数,请给我们一个失败的例子。
hours
startstop
列的数据类型是什么?创建表已经添加了为什么在查询中不将所有内容都转换为十进制(18,4)?如果您已经尝试过了,会发生什么?请参阅查询的第6行。我试图转换算术的输出,但得到了一个溢出错误。你的意思是把方程的每一部分都投进去吗?我无法复制。1) 你的创造。2)
将值(1,24.0,0,GETDATE(),“”)插入dbo.MyTable(ID,Hours,startstop,Updated,UpdatedBy)
3)您可以选择。如果问题在于不同的乘数,请给我们一个失败的例子。