我有两个表,我想通过MAC地址字段加入,但每个表存储的MAC地址略有不同:
Table 1 data: 0:1e:8:c5:9e:fe
Table 2 data: 00:1e:08:c5:9e:fe
第一个删除6组冒号分隔字段中的任何一个的起始0。
我是否可以在SQL中加入这些内容而无需修改数据?
我猜我必须将两个值都转换为XX:XX:XX:XX:XX:XX,然后比较它们......我只是不太确定该怎么做。
答案 0 :(得分:1)
您可以使用REPLACE
和STUFF
函数删除前导零:
SELECT *
FROM Table1
INNER JOIN Table2
ON Table1.ShortMac = STUFF(REPLACE(':' + Table2.LongMac, ':0', ':'), 1, 1, '')
答案 1 :(得分:0)
转换值的简单方法是在以下内容上拆分或标记字符串:然后循环遍历项目,如果大小!= 2,则前置0,然后将它们连接在一起。有点蛮力,但它做的工作。
答案 2 :(得分:0)
不幸的是,不,如果不以某种方式修改数据,就无法加入它们。
我会避免使用MAC地址作为主键,因为它们可以更改。
如果必须使用它们,是否可以确保它们全部以一致的格式插入?一旦处理完毕,您就可以编写一个脚本(无论是在SQL中,还是在可以与数据库交互的应用程序中使用其他语言)来将所有现有记录更新为一致的格式。您可以将它们拆分为分隔符,如“:”和代码,以便在需要时填充0。这将允许您进行连接而无需创建任何类型的转换方法。
答案 3 :(得分:0)
类似于@plattitude描述的强力方法,但有点简单,你可以使用常规表达式和REPLACE,其中每个':'字符匹配':'或':0'和较短的字符串或'0'+较短的字符串匹配较长的。
很抱歉在酒店房间无法访问构建和测试表达,但有人可能希望将其添加到答案中。