【发布时间】:2017-11-17 15:12:30
【问题描述】:
我收到了这个错误
消息 8114,第 16 级,状态 5,第 13 行
将数据类型 varchar 转换为数值时出错。
这是我的代码:
SELECT DISTINCT
DI.DealName AS 'Deal Name',
DI.OfferingType AS 'Offering Type',
DI.Date AS 'Date',
DI.ClassName AS 'Class',
ISNULL(Bench,'-') AS 'BM',
ISNULL(Guidance,'-') AS 'Guid',
DI.Industry AS 'Industry',
CAST( (ISNULL(DI.AverageLife,0)) AS VARCHAR(20)) AS 'WAL',CAST( ISNULL(DI.ClassSize,0) AS VARCHAR(20)) AS 'Balance',CAST( REPLACE(ISNULL(DI.Coupon,0),'%','') AS VARCHAR(20)) AS 'Coupon',
CAST( CASE WHEN CAST(REPLACE(ISNULL(DI.PX2,0),'%','') AS DECIMAL(18,5)) = 0.00 THEN (CASE WHEN ISNULL(CAST(DI.Yield * 100 AS DECIMAL(18,3)),0) = 0 THEN (CASE WHEN (ISNULL(DI.Coupon,0)+'cpn' = 'cpn' OR ISNULL(DI.Coupon,0)+'cpn' = '0cpn') THEN '-' ELSE (ISNULL(DI.Coupon,0)+'cpn')END)ELSE CAST(ISNULL(CAST(DI.Yield * 100 AS DECIMAL(18,3)),0) AS VARCHAR(15))+'%yld' END) ELSE (ISNULL(DI.PX,0)) END AS VARCHAR(20)) AS 'Spread', CAST( ISNULL(CAST(DI.Yield * 100 AS DECIMAL(18,3)),0) AS VARCHAR(20)) AS 'Yield', CAST( CASE WHEN LTRIM(RTRIM(DI.Dollar_Px)) = '' THEN 0.00 ELSE CAST(ISNULL(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(LTRIM(RTRIM(Dollar_Px)),CHAR(10),''),CHAR(13),''),'-',''),'/',''),' ',''),'%cpn',''),0) AS DECIMAL(18,5)) END AS VARCHAR(20)) AS 'Dollar_Px', ISNULL(Notes,'') AS Notes,
CAST((FRM.Rating + '/' + KBRARM.Rating) AS VARCHAR(15)) AS 'Rating' FROM DI_DealIssuancePost DI
INNER JOIN DI_CompanyRatingMapping MRM ON MRM.CompanyRatingMappingID = DI.Mdy INNER JOIN DI_CompanyRatingMapping SPRM ON SPRM.CompanyRatingMappingID = DI.S_P
INNER JOIN DI_CompanyRatingMapping FRM ON FRM.CompanyRatingMappingID = DI.Fitch
INNER JOIN DI_CompanyRatingMapping DBRSRM ON DBRSRM.CompanyRatingMappingID = DI.DBRS INNER JOIN DI_CompanyRatingMapping KBRARM ON KBRARM.CompanyRatingMappingID = DI.KBRA
INNER JOIN DI_WeeklySectors DIWeekly ON DI.Industry = DIWeekly.Sector
WHERE DI.IsDeleted = 0
AND MRM.IsDeleted = 0
AND SPRM.IsDeleted = 0
AND FRM.IsDeleted = 0
AND DBRSRM.IsDeleted = 0
AND KBRARM.IsDeleted = 0
AND DI.Date IS NOT NULL
AND (CONVERT(DATETIME,DI.Date ,101) >= CONVERT(DATETIME,@StartDate,101))
AND (CONVERT(DATETIME,DI.Date ,101) <= CONVERT(DATETIME,@EndDate,101)) AND DI.CurrencyID IN (SELECT * FROM CsvToTable(@Currency)) ORDER BY DI.Date desc
消息 8114,第 16 级,状态 5,第 13 行 将数据类型 varchar 转换为数值时出错。
我可以发现这是一个错误
CAST( CASE WHEN CAST(REPLACE(ISNULL(DI.PX2,0),'%','') AS DECIMAL(18,5)) = 0.00 THEN (CASE WHEN ISNULL(CAST(DI.Yield * 100 AS DECIMAL(18,3)),0) = 0 THEN (CASE WHEN (ISNULL(DI.Coupon,0)+'cpn' = 'cpn' OR ISNULL(DI.Coupon,0)+'cpn' = '0cpn') THEN '-' ELSE (ISNULL(DI.Coupon,0)+'cpn')END)ELSE CAST(ISNULL(CAST(DI.Yield * 100 AS DECIMAL(18,3)),0) AS VARCHAR(15))+'%yld' END) ELSE (ISNULL(DI.PX,0)) END AS VARCHAR(20)) AS 'Spread', CAST( ISNULL(CAST(DI.Yield * 100 AS DECIMAL(18,3)),0) AS VARCHAR(20)) AS 'Yield', CAST( CASE WHEN LTRIM(RTRIM(DI.Dollar_Px)) = '' THEN 0.00 ELSE CAST(ISNULL(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(LTRIM(RTRIM(Dollar_Px)),CHAR(10),''),CHAR(13),''),'-',''),'/',''),' ',''),'%cpn',''),0) AS DECIMAL(18,5)) END AS VARCHAR(20)) AS 'Dollar_Px', ISNULL(Notes,'') AS Notes,
有人帮助解决这个错误
【问题讨论】:
-
标记您正在使用的 dbms。该代码是特定于产品的。
-
我很抱歉,我无法通过完整的代码
-
微软 sql server 2014
-
错误信息说明了一切。您正在尝试将非数字 varchar 值转换为数字数据类型。
-
我应该发送完整代码@jarlh
标签: sql sql-server sql-server-2008 asp.net-mvc-4 stored-procedures