Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql SQL有没有一种方法可以链接两个具有相同值但格式不同的表?_Mysql_Sql_Left Join_Spaces - Fatal编程技术网

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