我需要将十六进制数(MAC地址)递增1。
例如,我有一个以这种格式的MAC地址:
00:A1:2C:3B:99:1F
我需要将此值增加1并以相同的格式保存新值:
00:A1:2C:3B:99:20
查询:
UPDATE Info
SET MAC = HEXTORAW(TO_CHAR(
TO_NUMBER(SUBSTR(RAWTOHEX(MAC), 1, 20), RPAD('x', 20, 'x')) + 1,
RPAD('fm0', 22, 'X')
)
|| SUBSTR(RAWTOHEX(MAC), 21))
WHERE ID = '';
答案 0 :(得分:0)
编辑:更新了更新语句以处理单位数的mac地址
这样可行,但以:FF
结尾的情况不起作用。
create table test_utsav_mac(id integer,mac varchar2(20));
insert into test_utsav_mac
values
(1,'01:26:5b:61:54:c0');
UPDATE TEST_UTSAV_MAC
SET MAC= CASE WHEN LENGTH(LTRIM(TO_CHAR(TO_NUMBER( SUBSTR(MAC,16,2) , 'xx' )+1,'xxxx'))) = 1
THEN SUBSTR(MAC,1,15) || '0' || LTRIM(TO_CHAR( TO_NUMBER( SUBSTR(MAC,16,2) , 'xx' )+1, 'xxxx' ))
ELSE SUBSTR(MAC,1,15) || LTRIM(TO_CHAR( TO_NUMBER( SUBSTR(MAC,16,2) , 'xx' )+1, 'xxxx' ))
END
WHERE ID = 1
select * from test_utsav_mac;
输出
ID MAC
1 01:26:5b:61:54:c1
substr(mac,1,15) || ltrim(to_char( to_number( substr(mac,16,2) , 'xx' )+1, 'xxxx' ))
正在做的是
ltrim(to_char( to_number( substr(mac,16,2) , 'xx' )+1, 'xxxx' ))
是
将最后一个十六进制值转换为十进制并以1递增。 PS:如果你想在其中处理:FF
逻辑,那么把它放在PL / SQL块中,让它在这种情况下抛出异常。