有什么方法可以比较两种不同类型的数据吗?
例如,我尝试使用两个不同的列来对两个表A和B进行LEFT JOIN
。表A的键是ProductNumber,它已作为文本输入到数据库中(我无法编辑),而表的键是B是StoreProductNumber,它是数字数据。
如果我用a LEFT JOIN b ON a.ProductNumber LIKE b.StoreProductNumber
这将允许我将两者用于联接吗?
以前,当我尝试使用Access和SSMS时,我收到一条错误消息,其中提到这两列是如何由不同类型的数据组成的。
最佳答案
如果ProductNumber可以包含比StoreProductNumber还要多的数字:
LEFT JOIN b
ON a.ProductNumber LIKE '%' + CAST(b.StoreProductNumber as varchar(n)) + '%'
显然,您可以修改
n
以确保您的StoreProductNumber不被截断。但是,如果保证它们是相同的(只是不同的数据类型),则可以直接比较它们:
LEFT JOIN b
on CAST(a.ProductNumber as BIGINT) = b.StoreProductNumber
如果不需要
BIGINT
,则可以使用INT
或所需的任何数据类型。最后,正如HLGEM指出的那样,SQL将为您执行隐式转换,因此从技术上讲,这也将起作用:
LEFT JOIN b
on a.ProductNumber = b.StoreProductNumber
但是,为了清晰起见,我更愿意明确地进行所有转换,因此建议您不要使用这种方法。