Mysql将int转换为MAC

Mysql将int转换为MAC,mysql,function,int,Mysql,Function,Int,我有一些转换数据,它有两列,一列有IP,它包含整数值。我在我的mysql查询中使用了以下函数。是否有一个函数可以用来将我的mac列(包含整数,数据类型为bigint)转换为mac地址 SELECT INET_NTOA(ip_address) AS myip,mymac FROM table1 假设您已通过抑制所有分隔符并将生成的十六进制数转换为int来存储MAC地址,则从该int到人类可读的MAC地址的转换为: function int2macaddress($int) { $he

我有一些转换数据,它有两列,一列有IP,它包含整数值。我在我的mysql查询中使用了以下函数。是否有一个函数可以用来将我的mac列(包含整数,数据类型为bigint)转换为mac地址

SELECT  INET_NTOA(ip_address) AS myip,mymac 
FROM table1

假设您已通过抑制所有分隔符并将生成的十六进制数转换为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)));
}
您也可以直接在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
只需使用:

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

因此,在你的情况下:

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

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

您使用什么算法来存储MAC地址是bigint?是否有mysql函数可用于将bigint转换为MAC地址。我想把它添加到我的mysql select语句中。我不使用php。感谢您的评论,并为php示例感到抱歉;我已经用MySQL函数示例更新了答案。谢谢你的解决方案,它给了我一个很好的线索。我试图将SQL直接集成到我最初的select语句中,但我很挣扎。
SELECT INET_NTOA(ip_address) AS myip, HEX(mymac)
FROM   table1