Mysql SQL有没有一种方法可以链接两个具有相同值但格式不同的表?
因此,我有两个来自两个不同数据库的列,我想链接它们 问题是,我的第一列以这种格式输出数字Mysql SQL有没有一种方法可以链接两个具有相同值但格式不同的表?,mysql,sql,left-join,spaces,Mysql,Sql,Left Join,Spaces,因此,我有两个来自两个不同数据库的列,我想链接它们 问题是,我的第一列以这种格式输出数字“1789 987”,第二列输出数据“000000000 1789987” 如何编写我的WHEREsqlforumla来识别这些匹配 好的,所以我把qrys拉到excel,为您提供更多信息。 这是不同的桌子 看起来Tbl2的NUM column设置为text。尽管程序中的QRY给Tbl1中的数字加了空格,但看起来QRY删除了它们 我希望信息变得更清楚一些。我是SQL和Stackoverflow的新手,我将
“1789 987”
,第二列输出数据“000000000 1789987”
如何编写我的WHERE
sqlforumla来识别这些匹配
好的,所以我把qrys拉到excel,为您提供更多信息。
这是不同的桌子
看起来Tbl2的NUM column设置为text。尽管程序中的QRY给Tbl1中的数字加了空格,但看起来QRY删除了它们
我希望信息变得更清楚一些。我是SQL和Stackoverflow的新手,我将在将来尝试改进我的问题信息。此演员阵容可能适合您: 注意:tbl1包含如下ID:
1789987
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
)
在任何情况下,请提供示例数据和可测试的示例您所做的工作以及所需的结果。要将格式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 LPAD(REPLACE(your_first_column, ' ', ''), 16, "0") = your_other_column
现在你也可以尝试用int来转换这两个列,你没有提供很多关于这些格式的信息,所以很难找到最好的解决方案 您想连接此列上的两个表或生成一个WHERE column1=column2?为什么格式不同?列数据类型是什么?您可以替换空格,并将两者转换为int。列的类型是什么,这些数字可以有多大/多长?您不需要强制转换两列吗?在第二列上“隐式强制转换”可以工作。我更喜欢使用尽可能少的强制转换,因为随着时间的推移,可能会导致问题。根据我编辑的帖子判断,你会怎么做?好吧,如果格式2总是16个字符长,我的解决方案应该有效:
WHERE“LPAD(REPLACE(REPLACE)(Tbl1.num),,”),16,“0”)=Tbl2.num
所以我得到了这个错误。-DB2 for i5/OS]SQL0206-找不到列或全局变量0。可能是我必须将它们都转换为INT吗?我删除了“0”中的逗号,并且成功了。非常感谢您的帮助Mickeel!
...WHERE LPAD(REPLACE(your_first_column, ' ', ''), 16, "0") = your_other_column