【问题标题】:While executing following query getting error message在执行以下查询时收到错误消息
【发布时间】:2018-02-28 22:25:17
【问题描述】:
SELECT o.TypeAbv + ' (' + o.TypeCode + ')' AS 'Type', o.PracticeAbv + ' (' + o.PracticeCode + ')' 
AS 'Practice', b.Unit AS 'Unit #', o.Acres AS 'Acres', o.InsuredSharePct AS 'Share', o.ApprovedYield 
AS 'Approved Yield', o.AdjustedYield AS 'Adjusted Yield', o.ProdGuarantee AS 'Guar/Acre', o.RateYield 
AS 'Simple Avg Yield', 
(CAST((CASE WHEN o.ProdGuarantee = '' THEN Null ELSE o.ProdGuarantee END) as decimal(10,2)) * CAST(o.Acres as decimal(10,2))) 
AS 'Total Guar UOM', o.BasePrice AS 'Price', o.Liability AS 'Total Protection', o.UnitDiscountFactor 
AS 'Unit Disc Factor', o.TotalPremium AS 'Base Premium', o.ProdPremium AS 'Subsidy Premium', o.Subsidy 
AS 'Subsidy Amount', o.SubsidyPercent AS 'Subsidy %', o.PremiumRate AS 'Base Prem Rate' 
FROM RMA_Output o INNER JOIN AR_Premium_Baseline b ON b.TestCaseID = o.TestCaseID 
AND b.ModuleNumber = o.ModuleNumber AND b.CropLineNumber = o.CropLineNumber AND b.ARLineNumber = o.ARLineNumber 
WHERE o.TestCaseID = 'AR_CA_Sacmnto_Chry_ARH_FeeByGrp_OuBuElection_MP4006' AND o.ModuleNumber = 4 AND o.CropLineNumber = 1 
AND o.CropYear = 2018
ORDER BY b.Unit, o.PracticeCode, o.TypeAbv

错误消息:消息 8114,级别 16,状态 5,行 32 将数据类型 nvarchar 转换为数字时出错。

有人解决了吗?

【问题讨论】:

  • 从错误信息中,我猜是SQL Server。请下次标记。您也可以尝试减少共享的代码量。这对您的问题来说非常重要。
  • 很可能在您要转换的字段之一中有一个无法转换为数字的字符串。你最好用缩进和每行一个字段/条件重新格式化你的代码。

标签: sql sql-server


【解决方案1】:

看起来这是您进行转换的唯一行。

 ,(CAST((CASE WHEN o.ProdGuarantee = '' THEN Null ELSE o.ProdGuarantee END) as decimal(10,2)) * CAST(o.Acres as decimal(10,2))) AS 'Total Guar UOM'

如果 2012+,使用 TRY_CONVERT()

 ,try_convert(decimal(10,2),o.ProdGuarantee) * try_convert(decimal(10,2),o.Acres) AS 'Total Guar UOM'

如果转换失败,Try_Convert() 将返回 NULL,而不是抛出错误。

【讨论】:

  • @S.Shah 很高兴它有帮助。如果愿意,请花点时间接受答案:)
猜你喜欢
  • 2021-06-27
  • 1970-01-01
  • 1970-01-01
  • 2020-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多