sqlite - преобразование гексасксии в число - PullRequest
0 голосов
/ 04 июня 2019

Кто-нибудь может сделать лучше?

sqlite> .schema
CREATE TABLE IF NOT EXISTS "hex2val" (
    "hex"   TEXT NOT NULL,
    "val"   INTEGER NOT NULL,
    PRIMARY KEY("hex")
);
CREATE TABLE power (x int primary key not null, power  not null);
sqlite> select * from hex2val;
0|0
1|1
2|2
3|3
4|4
5|5
6|6
7|7
8|8
9|9
A|10
B|11
C|12
D|13
E|14
F|15
sqlite> select * from power;
1|1
2|16
3|256
4|4096
5|65536

Выполнение:

WITH str as (
        select 1 pos, '0' value, 1 len UNION ALL
        select 2 pos, '21F' value, 3 len UNION ALL
        select 3 pos, '3B51' value, 4 len UNION ALL
        select 4 pos, 'FFFF' value, 4 len 
    ),
cnt as (WITH recursive cnt(idx) AS (SELECT 1 UNION ALL SELECT idx+1 FROM cnt LIMIT (select max(len) maxlen from str)) select * from cnt)
select pos, value, sum(val * power)
FROM str, cnt, hex2val, power
where idx <= len
  and hex = substr(value, idx, 1)
  and x = len -idx + 1
group by pos

Результат:

1   0   0
2   21F 543
3   3B51    15185
4   FFFF    65535

Я хочу удалить избыточность для 'str' - она ​​должна содержать только строки.
И я хотел бы избавиться от вспомогательных таблиц «hex2val» и «power» для отсутствующей функции преобразования и функции pow ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...