新手 - 使用CAST()和CONVERT()时出错

时间:2015-05-17 08:13:17

标签: sql-server tsql casting

我是编程新手。我正在学习SQL,并且正在使用SS2008作为起点。首先,谢谢你的帮助!它使像我这样的人学习的过程变得更加容易。

我已阅读其他主题,但他们的代码看起来要复杂得多。

我将尽可能简化:我正在查询想要在特定列上执行求和函数的数据库。

目前,该列的元数据是varchar类型。我明白,为了能够使用sum函数,有问题的列需要是int。

为了相应地转换列,我认为我可以使用强制转换/转换函数,但在执行此操作时会出现错误:

/**
CAST:Charge_Pct FROM VARCHAR -> INT
**/


SELECT CAST(Charge_Pct AS NUMERIC(7,7)) 

FROM [Main].[Share_Class_Charges]

WHERE CHARGE_PCT <> 'None'

-- Arithmetic overflow error converting varchar to data type numeric.
/**
CONVERT: Charge_Pct FROM VARCHAR -> INT
**/

SELECT CONVERT(NUMERIC(7,7),Charge_Pct) 
 FROM [Main].[Share_Class_Charges]
WHERE CHARGE_PCT <> 'None'
-- Error converting data type varchar to numeric.

我很困惑我出错的地方以及错误信息的内容。有人可以通过解释错误消息的含义以及纠正代码需要做些什么来帮助我吗?

非常感谢,

的Al。

1 个答案:

答案 0 :(得分:2)

NUMERIC(7,7)类型描述的数字在小数点前有0位数,后面有7位数。这意味着,如果您尝试将VARCHAR转换为小10.12,则会出现溢出错误。

请尝试此查询:

SELECT CAST(Charge_Pct AS NUMERIC(5,2)) 
FROM [Main].[Share_Class_Charges]
WHERE CHARGE_PCT <> 'None'

这会尝试将Charge_Pct列(我假设保留百分比)转换为NUMERIC类型,其中包含5个总数,其中2个位于小数位后。