0

我有两个表,我想通过 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,然后比较它们……我只是不太确定该怎么做。

4

4 回答 4

1

REPLACE您可以使用andSTUFF函数删除前导零:

SELECT *
FROM Table1
INNER JOIN Table2
ON Table1.ShortMac = STUFF(REPLACE(':' + Table2.LongMac, ':0', ':'), 1, 1, '')
于 2013-08-09T19:22:37.827 回答
0

类似于@plattitude 描述的蛮力方法,但更简单一些,您可以使用正则表达式和替换,其中每个“:”字符匹配“:”或“:0”,较短的字符串或“0”+较短的字符串匹配越长。

抱歉,在酒店房间里无法构建和测试表达式,但有人可能想将其添加到答案中。

于 2013-08-09T20:39:08.057 回答
0

不幸的是,不,如果不以某种方式修改数据,它们就无法加入。

我会避免使用 MAC 地址作为主键,因为它们可以更改。

如果您必须使用它们,是否可以确保它们都以一致的格式插入?处理完这些后,您可以编写一个脚本(无论是使用 SQL 还是在可以与数据库交互的应用程序中使用另一种语言)来将所有现有记录更新为一致的格式。您可以在分隔符处将它们分开,如 ':' 并在需要时填充 0。这将允许您进行连接,而无需创建任何类型的转换方法。

于 2013-08-09T18:57:05.910 回答
0

转换值的简单方法是拆分或标记 : 上的字符串。然后循环遍历这些项目,如果 size != 2,在前面加上一个 0,然后将它们连接在一起。有点蛮力,但它会做的工作。

于 2013-08-09T18:47:51.060 回答