2017-06-15 109 views
0

在执行下面的SQL查询我收到此错误SQL数据类型错误

[账户或贷款号]列“消息8114,级别16,状态5,行2
错误转换数据类型nvarchar浮动。“

如何将[帐号或贷款号]栏转换为varchar?

SELECT Distinct p.*, b.[Account or Loan No] as AccountNo006, b.Bucket as 
    Bucket006, b.[No of Overdue Days] as DPD006, b.[Markup Receivable Amount] 
    as MarkupReceivableAmount006, b.[MUP Current Balance (PKR)] as 
    CurrentBalance006 
FROM [test].[dbo].[newtable004] p 
Left join [test].[dbo].[ADV006-BPDLDMGTranchwise] b 
on p.[Account or Loan No] = b.[Account or Loan No] 
+0

问题是,列中的某些数据是无法转换为数字的'varchar'(文本)。你需要弄清楚它是什么数据,以及它是否是错字的结果(在这种情况下,你是UPDATE)还是这是预期的数据(在这种情况下你不能进行转换) – SchmitzIT

回答

0

如果您打算将varchar转换为float,则应该知道这两种数据类型彼此不兼容。在早期版本的SQL Server中,必须使用CASE,ISNUMERIC & CONVERT将varchar转换为float,但在更高版本中,只需使用一个函数TRY_CONVERT即可。让我创建一个示例来解释它。 ([编号]是一个varchar变量)

方法1个实施例:(对于早期版本的SQL Server):

--This script is compatible with SQL Server 2005 and above. 
Use tempdb 
GO 
Select [Numbers], 
(Case When Isnumeric([Numbers])=1 Then 
Convert(float,[Numbers]) else NULL end) As [Varchar to Float] 
from tbl_test 

方法2(对于SQL Server以后vesrsion):

--This script is compatible with SQL Server 2012 and above. 
Use tempdb 
GO 
Select Try_convert(float,[Numbers]) as [Varchar to float] 
from tbl_test 
+0

记录:['IsNumeric()'](https://docs.microsoft.com/en-us/sql/t-sql/functions/isnumeric-transact-sql)是臭名昭着的[问题](http:// www.sqlservercentral.com/articles/ISNUMERIC()/71512/)。 – HABO