Как преобразовать двоичный код ULID в строку с помощью Google BigQuery?

Я сохранил данные ULID BINARY в базе данных Google BigQuery. как я могу отформатировать BINARY (BYTE в BigQuery?) в строку ULID?

Спецификация Ulid https://github.com/ulid/spec

Это определение функции версии MariaDB.

      DELIMITER //

CREATE OR REPLACE FUNCTION ULID_TO_BINARY(s CHAR(26)) RETURNS BINARY(16) DETERMINISTIC
BEGIN
DECLARE s_base32 CHAR(26);
SET s_base32 = REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(UPPER(s), 'J', 'I'), 'K', 'J'), 'M', 'K'), 'N', 'L'), 'P', 'M'), 'Q', 'N'), 'R', 'O'), 'S', 'P'), 'T', 'Q'), 'V', 'R'), 'W', 'S'), 'X', 'T'), 'Y', 'U'), 'Z', 'V');
RETURN UNHEX(CONCAT(LPAD(CONV(SUBSTRING(s_base32, 1, 2), 32, 16), 2, '0'), LPAD(CONV(SUBSTRING(s_base32, 3, 12), 32, 16), 15, '0'), LPAD(CONV(SUBSTRING(s_base32, 15, 12), 32, 16), 15, '0')));
END//

CREATE OR REPLACE FUNCTION BINARY_TO_ULID(b BINARY(16)) RETURNS CHAR(26) DETERMINISTIC
BEGIN
DECLARE s_hex CHAR(32);
SET s_hex = LPAD(HEX(b), 32, '0');
RETURN REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(CONCAT(LPAD(CONV(SUBSTRING(s_hex, 1, 2), 16, 32), 2, '0'), LPAD(CONV(SUBSTRING(s_hex, 3, 15), 16, 32), 12, '0'), LPAD(CONV(SUBSTRING(s_hex, 18, 15), 16, 32), 12, '0')), 'V', 'Z'), 'U', 'Y'), 'T', 'X'), 'S', 'W'), 'R', 'V'), 'Q', 'T'), 'P', 'S'), 'O', 'R'), 'N', 'Q'), 'M', 'P'), 'L', 'N'), 'K', 'M'), 'J', 'K'), 'I', 'J');
END//

DELIMITER ;

Тесты

      SELECT
    *
FROM
    (
    SELECT
        BINARY_TO_ULID(ULID_TO_BINARY('01H2SMN7KNGNNJBB0HA155APHB')) as new_balue,
        '01H2SMN7KNGNNJBB0HA155APHB' as original_value
    ) convert_table
WHERE
    convert_table.new_balue = convert_table.original_value

Выходы

      new_balue                 |original_value            |
--------------------------+--------------------------+
01H2SMN7KNGNNJBB0HA155APHB|01H2SMN7KNGNNJBB0HA155APHB|

0 ответов

Другие вопросы по тегам