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

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

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

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

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

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

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

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

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

вы пробовали воспользоватся этой функцией, преобразовать в HEX на пример число 18446744073709551615?
...
Рейтинг: 0 / 0
Перевод числа типа numeric(xx,0) в hex
    #39939669
Lonepsycho
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Перевод числа типа numeric(xx,0) в hex
    #39939678
Фотография ptr128
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Partisan M
есть ли среди встроенных функций PostgreSQL подходящая. Такая нашлась: to_hex.

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

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

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


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