【发布时间】:2016-03-07 16:43:34
【问题描述】:
使用: SQL Server 2008 Management Studio,T-SQL
问题描述:我基本上有两个带有AccountNumber 列的表。在一个表中存储为NUMERIC,在另一个表中存储为VARCHAR(不幸的是,这种数据类型差异无法更改)。
因此,为了保持一致性,为了将它们都转换为数值数据类型,我尝试的解决方案是仅在 VARCHAR 表中使用 LEFT JOIN,并将 AccountNumber 列转换为 NUMERIC。
效果很好,查询将运行。
然而, 我一添加WHERE 子句,它就会崩溃并出现如下所示的错误。如您所见,使用WHERE 子句,我基本上只是对特定的(NUMERIC)AccountNumber 进行查询搜索。
当来自LEFT JOIN 的AccountNumber 列是NUMERIC 时,为什么会出现此转换错误问题?
/*
Assumptions:
A.AFIELD is numeric
B.BFIELD is varchar
Result:
Msg 8114, Level 16, State 5, Line 10
Error converting data type varchar to numeric.
*/
SELECT A.AccountNumber, B.AccountNumber
FROM A
LEFT JOIN
(SELECT CONVERT(NUMERIC, B.AccountNumber) AccountNumber
FROM B
WHERE ISNUMERIC(B.AccountNumber) = 1) B ON B.AccountNumber = A.AccountNumber
WHERE A.AccountNumber = 1234567890
/*NOTE: I am searching the originally numeric AccountNumber field for a numeric, yet it's erroring out*/
【问题讨论】:
-
它告诉你 B 中有一个值不能转换为数字。
-
case when isnumeric() then convert(numeric) end
标签: sql-server tsql numeric varchar