将varchar值“N”转换为数据typesint时转换失败
我从“收购”表中find债券的原始余额,个人“performance”季度。 它在每个季度都有效,但是当我试图在2010年1季度运行我的查询时,我收到了这个通知:
Msg 245, Level 16, State 1, Line 2 Conversion failed when converting the varchar value 'N' to data type int.
我的查询是:
SELECT ALL a.[LOAN IDENTIFIER] ,[CHANNEL] ,[SELLER NAME] ,[ORIGINAL INTEREST RATE] ,[ORIGINAL UNPAID PRINCIPAL BALANCE (UPB)] ,[ORIGINAL LOAN TERM] ,[ORIGINATION DATE] ,[FIRST PAYMENT DATE] ,[ORIGINAL LOAN-TO-VALUE (LTV)] ,[ORIGINAL COMBINED LOAN-TO-VALUE (CLTV)] ,[NUMBER OF BORROWERS] ,[ORIGINAL DEBT-TO-INCOME RATIO] ,[CREDIT SCORE] ,[FIRST-TIME HOME BUYER INDICATOR] ,[LOAN PURPOSE] ,[PROPERTY TYPE] ,[NUMBER OF UNITS] ,[OCCUPANCY STATUS] ,[PROPERTY STATE] ,[ZIP (3-DIGIT)] ,[MORTGAGE INSURANCE PERCENTAGE] ,[PRODUCT TYPE] FROM dbo.Performance_2010Q1 a join dbo.TotalAcquisition b on a.[Loan Identifier] = b.[LOAN IDENTIFIER] Where a.[Zero Balance Code] = 97 or a.[Zero Balance Code] = 03
零余额代码告诉债券如何违约,我根据每个债券的“贷款标识符”
谢谢! 😀
由于在字段列表中没有明确的转换,因此它必须是ON
或WHERE
子句中的隐式转换。
对于导致转换的ON
子句, 贷款标识符必须被定义为一个nvarchar
,并在另一个表中被定义为一个int
。 这不太可能(虽然不是不可能;-)
所以我怀疑你的WHERE
子句。 如果零平衡代码被定义为nvarchar
并且您正在比较一个int
(97或3),这将导致隐式转换。 如果只有一个表中包含字符的条目,则此隐式转换将失败。 避免这种情况的一种方法是用string定义WHERE
子句(例如, WHERE A.[Zero Balance Code] = '97'
, '03'
)。 一个稍微优雅的方法是用ISNUMERIC检查数字数据。 因为你怎么知道平衡代码总是'03'
而不是'3'
? 这些条目将被过滤掉,因为'3'
不等于'03'
…
不过要小心:
这可能是无视真正的问题。 这里最大的问题是,为什么突然你的表中有非数字数据! 你需要检查你是否有损坏的数据input到你的系统。
在[Zero Balance Code]中是否有值不能转换为int的值?
试试这个你的地方caluse:
Where a.[Zero Balance Code] = '97' or a.[Zero Balance Code] = '03'