【问题标题】:Mysql convert an int to MACMysql将int转换为MAC
【发布时间】:2023-04-09 14:18:02
【问题描述】:

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

SELECT  INET_NTOA(ip_address) AS myip,mymac 
FROM table1

【问题讨论】:

  • 你用什么算法存储MAC地址是bigint?

标签: mysql function int


【解决方案1】:

假设您已通过抑制所有分隔符并将生成的 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

【讨论】:

  • 有没有我可以用来将 bigint 转换为 MAC 地址的 mysql 函数。我想将它添加到我的 mysql select 语句中。我没有使用 php。
  • 感谢您的评论并对 PHP 示例感到抱歉;我已经用 MySQL 函数示例更新了答案。
  • 感谢您提供的解决方案,它给了我一个很好的领导。我试图将 SQL 直接集成到我原来的 select 语句中,但我很挣扎。
【解决方案2】:

只需使用HEX():

对于数字参数 NHEX() 返回 N 值的十六进制字符串表示 被视为 longlong (BIGINT) 号码。

因此,在你的情况下:

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

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

【讨论】:

    猜你喜欢
    • 2011-01-22
    • 1970-01-01
    • 1970-01-01
    • 2014-06-05
    • 2012-02-26
    • 2023-03-19
    • 1970-01-01
    • 2019-06-18
    • 2015-10-09
    相关资源
    最近更新 更多