SQL是否可以链接具有相同值但格式不同的两个表?

时间:2019-01-22 09:09:26

标签: mysql sql left-join spaces

所以我想链接来自两个不同数据库的两列。

问题是我的第一列以这种格式"1 789 987"输出数字,而第二列以数据"0000000001789987"输出

如何编写我的WHERE sql forumla以将其识别为匹配项?

好吧,所以我抽出了qrys,以便为您提供更多信息。 这是不同的表。

tbl1

tbl2

类似Tbl2的NUM列设置为文本。即使程序中的QRY给Tbl1中的数字提供了空格,它看起来也像qry删除了它们耸肩

SELECT *
FROM "Tbl1","Tbl2"
WHERE "Tbl1"."num" = "Tbl2"."num" 
AND "Tbl1"."Date" BETWEEN '2019-01-21' AND '2019-01-25' 

我希望信息变得更加清晰。我是SQL和Stackoverflow的新手,以后我将尝试改善问题信息。

2 个答案:

答案 0 :(得分:2)

好吧,要将格式1转换为格式2,您可以尝试执行以下操作:

set @format1 = "1 789 987";
set @format2 = "0000000001789987";

select LPAD(REPLACE(@format1, ' ', ''), 16, "0") as format1, @format2 as format2

输出为:

====================================
     format1     |     format2
====================================
0000000001789987 | 0000000001789987

这样,如果您进行测试,format1看起来就像format2。 REPLACE删除' 'LPAD将用0填充字符串,直到该字符串的长度为16个字符长度,如format2。

因此您可以在WHERE条件下使用它:

...WHERE LPAD(REPLACE(your_first_column, ' ', ''), 16, "0") = your_other_column

现在您也可以尝试将两个列都转换为int,因为您没有提供有关这些格式的大量信息,所以很难找到最佳解决方案!

答案 1 :(得分:1)

此演员表可能适合您:

注意:tbl1包含以下ID:1 789 987

select *
from tbl1 join tbl2 on (
                        cast( -- casts to integer
                               replace(tbl1.text_id, ' ', '') -- removes whitespaces
                                 as int) = 
                        tbl2.numeric_id -- join on second table
                        )

无论如何,请提供示例数据和可测试的示例,您所做的以及所需的结果