2013-05-16 38 views
3

我有一些數據轉換其中有2列一列有IP,它包含值是整數。我在我的mysql查詢中使用以下函數。是否有一個函數可以用來將包含整數和數據類型的我的mac列轉換爲mac地址。Mysql將一個int轉換爲MAC

SELECT INET_NTOA(ip_address) AS myip,mymac 
FROM table1 
+0

你用什麼算法存儲MAC地址是bigint? – Stephan

回答

5

假設您已通過抑制所有分離器和所得到的十六進制數變換爲INT存儲的MAC地址,從這個中斷到人類可讀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 
+0

是否有我可以用來將bigint轉換爲MAC地址的mysql函數。我想將它添加到我的mysql select語句中。我沒有使用PHP。 – saiyan101

+0

感謝您對PHP示例的評論和抱歉,我已經用MySQL函數示例更新了答案。 –

+0

非常感謝您爲我提供了一個好的解決方案。我試圖直接將SQL集成到我原來的select語句中,但很掙扎。 – saiyan101

0

只需使用HEX()

對於數字參數NHEX()返回值的十六進制字符串表示N作爲longlong處理(BIGINT)nu MBER。

因此,你的情況:

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

注意,這將不插入分隔符字節,如冒號字符。