Гость
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Перевод числа типа numeric(xx,0) в hex / 8 сообщений из 8, страница 1 из 1
16.03.2020, 21:23
    #39938017
electrod
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перевод числа типа numeric(xx,0) в hex
Добрый день!

Есть ли у кого-то под рукой функция для postgresql перевода длинных чисел numeric (которые не влезают в int8) в HEX?

в обратную сторону функция есть ( https://stackoverflow.com/questions/33486595/postgresql-convert-hex-string-of-a-very-large-number-to-a-numeric), в прямую - нет.

Спасибо!
...
Рейтинг: 0 / 0
20.03.2020, 10:15
    #39939395
ptr128
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перевод числа типа numeric(xx,0) в hex
electrod,
Если подключен PL/Perl, то проще им.
Так работает:

perl -e "use bigint; print 12345678901234567890122349898127687126387649892174981734198749->as_hex;"

0x7aec7b5e9597bde51119040b79ebafa613f918efe7fbe25eddd
...
Рейтинг: 0 / 0
20.03.2020, 11:21
    #39939449
Partisan M
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перевод числа типа numeric(xx,0) в hex
ptr128,

Это один из открытых мной законов плохого программирования:
- вместо того, чтобы изучить, как сделать правильно, изобретают, как обойтись без изучения, и делают неправильно.

Этот закон я открыл наблюдениями над жизнью природы.

В данном примере правильно было бы узнать, есть ли среди встроенных функций PostgreSQL подходящая. Такая нашлась: to_hex.
...
Рейтинг: 0 / 0
20.03.2020, 18:34
    #39939666
Lonepsycho
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перевод числа типа numeric(xx,0) в hex
Partisan M,

вы пробовали воспользоватся этой функцией, преобразовать в HEX на пример число 18446744073709551615?
...
Рейтинг: 0 / 0
20.03.2020, 18:41
    #39939669
Lonepsycho
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перевод числа типа numeric(xx,0) в hex
electrod,

для себя делал так
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
CREATE OR REPLACE FUNCTION fu_to_hex (
  p_val numeric
)
RETURNS text AS
$body$
DECLARE
  l_hex TEXT := '';
  l_val NUMERIC(64, 0) := abs($1);
BEGIN
  WHILE l_val > 0 LOOP
    l_hex := concat(
               CASE 
                 WHEN mod(l_val, 16) < 10
                 THEN chr(CAST(mod(l_val, 16) + 48 AS INTEGER))
                 ELSE chr(CAST(mod(l_val, 16) + 55 AS INTEGER)) 
               END, 
               l_hex
             );
    l_val := div(l_val, 16);
  END LOOP;
  IF(l_hex = '')
  THEN
    l_hex := '0';
  END IF;
  RETURN l_hex;
END;
$body$
LANGUAGE 'plpgsql'
IMMUTABLE
RETURNS NULL ON NULL INPUT
SECURITY INVOKER;



вам может не подойти, ибо для меня все числа должны быть >0
...
Рейтинг: 0 / 0
20.03.2020, 19:05
    #39939678
ptr128
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перевод числа типа numeric(xx,0) в hex
Partisan M
есть ли среди встроенных функций PostgreSQL подходящая. Такая нашлась: to_hex.

Ну так покажите здесь, что она выведет для числа из моего примера

12345678901234567890122349898127687126387649892174981734198749
...
Рейтинг: 0 / 0
20.03.2020, 19:08
    #39939680
ptr128
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перевод числа типа numeric(xx,0) в hex
Lonepsycho,
если PL/Perl подключен, то он будет явно быстрее и эффективней, чем цикл на PL/pgpsql
...
Рейтинг: 0 / 0
20.03.2020, 19:54
    #39939704
Lonepsycho
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перевод числа типа numeric(xx,0) в hex
ptr128
Lonepsycho,
если PL/Perl подключен, то он будет явно быстрее и эффективней, чем цикл на PL/pgpsql

если...
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Перевод числа типа numeric(xx,0) в hex / 8 сообщений из 8, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]