Преобразование отрицательного числа в Oracle в шестнадцатеричный формат дает неверный результат?

#oracle #plsql #hex #to-char

#Oracle #plsql #шестнадцатеричный #в-char

Вопрос:

Я использую приведенную ниже инструкцию select для преобразования положительного числа в шестнадцатеричное

 SQL>select to_char('2122699925', 'XXXXXXXXXXXXXXXX') from testable
Output : 7E85D495
  

Но TO_CHAR для отрицательного числа выдает мне вывод в виде #################

 SQL>select to_char('-2122699925', 'XXXXXXXXXXXXXXXX') from testable
Output : #################
  

Требуемый результат должен быть 817A2B6B. Есть мысли?

Ответ №1:

В документации говорится (элементы числового формата в таблице 2-13), здесь

Возвращает шестнадцатеричное значение из указанного количества цифр. Если указанное число не является целым числом, то Oracle Database округляет его до целого числа.

Ограничения:

Этот элемент принимает только положительные значения или 0. Отрицательные значения возвращают ошибку.

…….

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

Преобразование отрицательных чисел в шестнадцатеричный

Комментарии:

1. Здравствуйте, Суджитмоханти, сообщение было полезным и решило мой вопрос, но что означает число 4294967296 в приведенном ниже заявлении? <предварительно> 1 ВЫБЕРИТЕ значение val, 2 To_Char( 3 Расшифруйте ( 4 знака (val), -1, 4294967296 — Abs (val), 5 Abs (val) 6 ), ‘XXXXXXXX’) Из 7 * (ВЫБЕРИТЕ -1000175007 val ИЗ dual) </ pre>

2. Это не что иное, как МОЩНОСТЬ (16,8). Как я понял из сообщения, зависит от числа, которое мы хотим преобразовать в шестнадцатеричное, т.е. 16 представляет шестнадцатеричное и 8 зависит. от того, в какой шестнадцатеричный мы хотим преобразовать 2-значный шестнадцатеричный или 3-значный шестнадцатеричный или 8-значный шестнадцатеричный и так далее.. У меня есть некоторый пробел в понимании альтернативного подхода.