sql - 连接不同的数据类型

标签 sql sql-server

有什么方法可以比较两种不同类型的数据吗?

例如,我尝试使用两个不同的列LEFT JOIN两个表 A 和 B。表 A 的键是 ProductNumber,它已输入到数据库中(我无法edit) 为文本,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

但是,为了清楚起见,我更喜欢显式地进行所有转换,因此我建议不要采用这种方法。

关于sql - 连接不同的数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45192467/

相关文章:

sql - 存储过程中的错误 : current transaction cannot be commited and cannot support operations that write to the log file

java - 假设 Java JDBC 隔离级别是有序的是否安全?

c# - 从具有重复数据的 SQL 结果创建键值对

sql-server - 如何在 SQL 连接字符串中使用 Azure KeyVault secret ?

sql-server - MSSQL 组直到类型改变

sql-server - 为什么quoted_identifier必须为ON才能使用过滤索引?

SQL Server 显示不同列数大于 1 的结果

php - 在php中根据条件从数据库生成随机数据

sql - 如何编写一个 T-Sql 查询,如果表 A 中的列中的值与表 B 中的列中的值匹配,则输出 1,否则输出 0?

SQL/Hive 计数不同的列