在 Oracle 中将小数转换为十六进制
Convert fractional number to Hexadecimal in Oracle
我在数据库中有一个 table 具有小数值-
价值
14.65
45
7458.34
34.69
4.7
34
我想把这个小数值转换成十六进制。
但是to_hex函数只转换十进制值(14)而不是(14.65)。
也尝试过 to_char-
SELECT TO_CHAR(15.33, 'X') 来自双重; --->输出:F
我不想对值进行上限或下限并打印十六进制数。
我要 15.33 --->F.547AE147
将值拆分为整数和小数部分,并分别对它们使用 TO_CHAR
:
WITH table_name (value) AS (
SELECT 15.33 FROM DUAL UNION ALL
SELECT -15.33 FROM DUAL
)
SELECT value,
CASE WHEN value < 0 THEN '-' END
|| TO_CHAR(TRUNC(ABS(value)), 'fmXXXXXXXXXX')
|| '.'
|| TO_CHAR(
ABS(MOD(value, 1))*TO_NUMBER('FFFFFFFF', 'XXXXXXXX'),
'fm0XXXXXXX'
) AS hex
FROM table_name;
输出:
VALUE
HEX
15.33
F.547AE147
-15.33
-F.547AE147
db<>fiddle here
我在数据库中有一个 table 具有小数值- 价值 14.65 45 7458.34 34.69 4.7 34
我想把这个小数值转换成十六进制。
但是to_hex函数只转换十进制值(14)而不是(14.65)。
也尝试过 to_char- SELECT TO_CHAR(15.33, 'X') 来自双重; --->输出:F
我不想对值进行上限或下限并打印十六进制数。 我要 15.33 --->F.547AE147
将值拆分为整数和小数部分,并分别对它们使用 TO_CHAR
:
WITH table_name (value) AS (
SELECT 15.33 FROM DUAL UNION ALL
SELECT -15.33 FROM DUAL
)
SELECT value,
CASE WHEN value < 0 THEN '-' END
|| TO_CHAR(TRUNC(ABS(value)), 'fmXXXXXXXXXX')
|| '.'
|| TO_CHAR(
ABS(MOD(value, 1))*TO_NUMBER('FFFFFFFF', 'XXXXXXXX'),
'fm0XXXXXXX'
) AS hex
FROM table_name;
输出:
VALUE HEX 15.33 F.547AE147 -15.33 -F.547AE147
db<>fiddle here