将varchar值'N'转换为数据类型int时转换失败

时间:2013-07-02 13:57:22

标签: sql sql-server excel

我一直在“收购”表中找到债券的原始余额,用于个人“绩效”季度。它适用于每个季度,但当我试图在2010Q1上运行我的查询时,我收到了此通知:

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

零余额代码告诉债券违约是怎样的,我根据每个债券“贷款标识符”在两个表之间进行匹配

谢谢! :-D

2 个答案:

答案 0 :(得分:2)

由于您在字段列表中没有显式转换,因此它必须是ONWHERE子句中的隐式转换。

要导致转化的ON子句,贷款标识符必须在一个中定义为nvarchar,在另一个中定义为int表。这不太可能(虽然不是不可能; - )

所以我怀疑你的WHERE条款。 IF 零余额代码定义为nvarchar,并且您正在与int(97或3)进行比较,这将导致隐式转换。如果您的表中只有一个包含字符的条目,则此隐式转换将失败。 避免这种情况的一种方法是使用字符串定义WHERE子句(例如WHERE A.[Zero Balance Code] = '97''03'相同)。一种稍微优雅的方法是使用ISNUMERIC检查数字数据。因为您如何知道余额代码始终为'03',而不仅仅是'3'?这些条目将被过滤掉,因为'3'不等于'03' ...

但要小心:
这可能忽略了真正的问题。 这里的一个重要问题是,为什么你的表中会突然出现非数字数据!你需要检查一下你是否以某种方式将损坏的数据输入到你的系统中。

答案 1 :(得分:1)

。[零余额代码]中是否有值无法转换为int?

试试这个问题:

Where a.[Zero Balance Code] = '97' or a.[Zero Balance Code] = '03'