在产品UPC varchar(20)上加入的最佳方式?

Car*_*man 2 sql sql-server

我想在两张桌子上做一个JOIN.每个表包含来自不同数据源的UPC varchar2(20).

使这个JOIN有点困难的原因是UPC的值可以在大小上变化,有时可以用前导零填充,有时不填充.所有都包含一个尾随校验位.

例如:

        Table 1               Table 2
UPC     "00000123456789"           "123456789"
             "234567890"           "234567890"
        "00000003456789"      "00000003456789"
               "3456799"      "00000003456799"
Run Code Online (Sandbox Code Playgroud)

我的想法是将每个转换为长,然后进行比较.或者我可以追加前导零.或者包含一个.

使用SQL进行连接的最佳方法是什么?

Rah*_*thi 5

你可以试试这个:

select * from 
table1 inner join table2 
on (CAST(CAST(table1.UPC AS BIGINT) AS VARCHAR))
            =(CAST(CAST(table2.UPC AS BIGINT) AS VARCHAR))
Run Code Online (Sandbox Code Playgroud)

SQL FIDDLE DEMO

要么

select * from 
table1 inner join table2 
on (RIGHT(table1.UPC,(LEN(table1.UPC) - PATINDEX('%[^0]%',table1.UPC)) + 1))
            =(RIGHT(table2.UPC,(LEN(table2.UPC) - PATINDEX('%[^0]%',table2.UPC)) + 1))
Run Code Online (Sandbox Code Playgroud)

SQL FIDDLE DEMO

  • 这需要使用bigint.在大多数情况下,UPC太大而无法转换为int.此外,如果涉及用户输入(或垃圾输入/垃圾输出),这可能涉及类型转换错误.我一直处理电子商务系统,而UPC数据总是会导致问题. (2认同)
  • 我总体上喜欢你的解决方案 (2认同)