Преобразование внешнего представления MAC-адреса во внутреннее

Функция

Преобразование внешнего представления MAC-адреса во внутреннее.

Спецификация
 
< синтаксис >::=
Синтаксические правила
  1. < Символьное выражение > должно иметь тип CHAR или VARCHAR.

  2. < Формат > задает формат представленного в < символьном выражении > MAC-адреса. Количество символов MAC-адреса (без учета пробелов) и символов формата должно строго соответствовать друг другу.

  3. Формат имеет следующий шаблон:

    [#][…]x[…]

    где:

    • # – задает набор и представление символов-разделителей элементов MAC-адреса;

    • x (латинская кодировка) – задает количество шестнадцатеричных цифр, представляющих элемент MAC-адреса. Независимо от способа представления полного МАС-адреса шаблон формата должен содержать 12 знаков «х».

    Если < формат > не задан, по умолчанию применяются следующие форматы MAC-адресов:

    • xxxxxx;xxxxxx

    • xxxxxx-xxxxxx

    • xxxx.xxxx.xxxx

    • xx-xx-xx-xx-xx-xx

    • xx:xx:xx:xx:xx:xx

    Примеры возможных форматов:

    Внешнее представление MAC-адреса Формат
    08002b/010203 xxxxxx/xxxxxx
    008.00.02b/01:02:03 0xx.xx.0xx/xx:xx:xx
    #08-00-2b-01.02.03 #xx-xx-xx-xx.xx.xx
    < 08 >< 00 >< 2b >< 01 >< 02 >< 03 > < xx >< xx >< xx >< xx >< xx >< xx >
    08 | 00 | 2b xx|xx|xx
    08002b:010203 xxxxxx:xxxxxx
Возвращаемое значение
  1. Внутреннее представление MAC-адреса.

  2. Код завершения 1036 («Неправильный аргумент»), если представление MAC-адреса и его формат не соответствуют друг другу.

  3. Тип возвращаемого значения – BYTE (6).

Примеры
select mactoraw('08-00-2b-01-02-03');
|08002B010203|
select mactoraw('08/00/2b/01/02/03',
'XX/XX/XX/XX/XX/XX');
|08002B010203|
select mactoraw('008 | 000 |02b | 001 | 002 | 003', 'xxx|xxx|xxx|xxx|xxx|xxx');
|00800002B001|
select rawtomac(mactoraw('08-00-2b-01-02-03'));
|08:00:2B:01:02:03|
create or replace table tab1 ("MAC-формат" varchar(20));
insert into tab1 values ('xx.xx.xx.xx.xx.xx');
select mactoraw('08.00.2b.01.02.03', "MAC-формат") from tab1;
|08002B010203|