2017-06-15 124 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