3

我有一些数据可以转换,其中有 2 列,一列有 IP,它包含整数值。我在我的 mysql 查询中使用了以下函数。有没有一个函数可以用来转换我的 mac 列,其中包含整数和数据类型是 bigint 到 MAC 地址。

SELECT  INET_NTOA(ip_address) AS myip,mymac 
FROM table1
4

2 回答 2

5

假设您通过抑制所有分隔符并将生成的 HEX 数字转换为 int 来存储 MAC 地址,则从该 int 转换为人类可读的 MAC 地址将是:

function int2macaddress($int) {
    $hex = base_convert($int, 10, 16);
    while (strlen($hex) < 12)
        $hex = '0'.$hex;
    return strtoupper(implode(':', str_split($hex,2)));
}

该函数取自http://www.onurguzel.com/storing-mac-address-in-a-mysql-database/

此函数的 MySQL 版本:

delimiter $$
create function itomac (i BIGINT)
    returns char(20) 
    language SQL
begin
    declare temp CHAR(20);
    set temp = lpad (hex (i), 12, '0');
    return concat (left (temp, 2),':',mid(temp,3,2),':',mid(temp,5,2),':',mid(temp,7,2),':',mid(temp,9,2),':',mid(temp,11,2));
end;
$$
delimiter ;

您也可以直接在 SQL 中执行此操作,如下所示:

select
    concat (left (b.mh, 2),':',mid(b.mh,3,2),':',mid(b.mh,5,2),':',mid(b.mh,7,2),':',mid(b.mh,9,2),':',mid(b.mh,11,2))
from (
    select lpad (hex (a.mac_as_int), 12, '0') as mh
    from (
        select 1234567890 as mac_as_int
    ) a
) b
于 2013-05-16T13:36:27.263 回答
0

只需使用HEX()

对于数字参数NHEX()返回值的十六进制字符串表示形式,将其N视为 longlong ( BIGINT) 数字。

因此,在您的情况下:

SELECT INET_NTOA(ip_address) AS myip, HEX(mymac)
FROM   table1

请注意,这不会插入字节分隔符,例如冒号字符。

于 2013-05-16T13:36:34.933 回答