2014-10-30 64 views
1

列中一个较大的值已引起我的SQL抛出错误信息: 错误转换数据类型为varchar到数字的SQL Server将varchar列值“1218300.00”为INT

我已经分离出这一个特定的行。下面是一个简单的脚本,“作品”:

SELECT 
    MtgeLoanAmount 
    , CAST(convert(numeric(15,2),'1218300.00') as int) as TrialValue 
FROM dbo.Processed_VA_From_Excel 
    where FipsStateCode='06' 
    and FipsCountyCode='013' 
    and GuarantyAmount = '304575' 

为粘贴在这里返回的结果: enter image description here

所以,当我试图通过添加第三列“概括”我的测试如下它不能转换:

SELECT 
MtgeLoanAmount 
, CAST(convert(numeric(15,2),'1218300.00') as int) as TrialValue 
, CAST(convert(numeric(15,2),MtgeLoanAmount) as int) 
FROM dbo.Processed_VA_From_Excel 
where 
    FipsStateCode='06' 
and FipsCountyCode='013' 
and GuarantyAmount = '304575' 

返回此:

Msg 8114, Level 16, State 5, Line 1 
Error converting data type varchar to numeric. 
+1

什么是'MtgeLoanAmount'声明为? – DeanOC 2014-10-30 22:29:45

+0

谢谢,DeanOC。 MtgeLoanAmount被声明为varchar(255),大部分值不大于1218300.00(大多数都小于1百万) – 2014-10-30 23:35:32

+0

15,2表示总共15个,其中2个是小数点,因此存在较大值,得到最大值并检查也可能需要bigint来代替int – radar 2014-10-30 23:51:07

回答

1

这可能适合你:

SELECT 
    MtgeLoanAmount, 
    CONVERT(INT, ROUND(MtgeLoanAmount, 0)) AS MtgeLoanAmountNoCents 
FROM 
    dbo.Processed_VA_From_Excel 
WHERE 
    FipsStateCode = '06' AND 
    FipsCountyCode = '013' AND 
    GuarantyAmount = '304575' 
+0

谢谢JohnS。不知怎的,我猜这是数字的大小。上面的代码建议运行良好。 – 2014-10-31 02:19:34

+0

不是大小,ROUND()函数使它工作! – JohnS 2014-10-31 02:52:45

相关问题