将varchar转换为包含空值的bigInt



我试图获得存在于一个表中而不是另一个表中的所有值。连接它们的条件在一个表中是varchar,在另一个表中是bigInt (swmItems是bigInt, OBJ_TAB是varchar)。我尝试了以下操作:

 SELECT si.upc as upc from swmItems si 
 left outer join dbo.OBJ_TAB obj  on cast(obj.F01 as BIGINT) = si.upc 
 WHERE obj.F01 IS NULL

然而,它给我的错误:"错误转换数据类型varchar到bigint"。

我还尝试了以下操作:

 SELECT * FROM OBJ_TAB WHERE ISNUMERIC(f01) != 1

它什么也不返回所以我所有的值都应该是OBJ_TAB

中的数字

我认为这是因为值存在于第一个表,而不是第二个(试图将null转换为bigInt)。这两张桌子可以这样连接吗?

我正在使用Microsoft SQL 2012

脚注:在OBJ_TAB中,存在数字前面的零数,这就是为什么将所有内容作为varchar进行比较不适合我的原因。

SELECT swmItems.upc
FROM swmItems 
     LEFT JOIN OBJ_TAB
         ON CASE WHEN ISNUMERIC(OBJ_TAB.F01 + '.e0') = 1 -- ensure no decimals
                 THEN CASE WHEN CONVERT(float, OBJ_TAB.F01) BETWEEN -9223372036854775808 
                                                                AND 9223372036854775807
                           THEN CONVERT(bigint, OBJ_TAB.F01)
                      END
            END = swmItems.upc
WHERE OBJ_TAB.F01 IS NULL

不能将任何非数值转换为整数数据类型。但是您可以将数值转换为varchar数据类型。

那么,你可以这样尝试。

SELECT si.upc as upc from swmItems si 
left outer join dbo.OBJ_TAB obj  on obj.F01 = Cast(si.upc As Varchar)
WHERE obj.F01 IS NULL

很长的死胡同,但是如果你像我一样从未来遇到它,给TRY_CONVERT一个机会。

最新更新