[英]Oracle SQL - Select large number as hex string
我有一张表,其中一列是数字。 如何选择此列作为十六进制字符串?
我尝试使用to_char(my_column, 'xxxx')
但这不是我想要的,因为我想要选择的列并不总是具有相同的值,并且to_char
的第二个参数需要与输出十六进制的大小完全相同细绳。 老实说,我觉得这很愚蠢,因为您需要在调用to_char
之前知道to_char
的返回值才能构造它的第二个参数。
使用带有TO_CHAR
的fm
格式模型,它将TO_CHAR
前导空格,然后只包含足够的X
字符以显示您需要容纳的最大值:
SELECT value,
TO_CHAR(
value,
'fmXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
) AS hex_value
FROM table_name
ORDER BY value;
其中测试数据:
INSERT INTO table_name ( value )
SELECT POWER( 2, 4 * (LEVEL-1) ) FROM DUAL CONNECT BY LEVEL <= 20 UNION ALL
SELECT POWER( 2, 4 * (LEVEL-1) ) - 1 FROM DUAL CONNECT BY LEVEL <= 20;
输出:
\n 价值 | HEX_VALUE \n ---------------: | :--------------------\n 0 | 0 \n 1 | 1 \n 15 | F \n 16 | 10 \n 第255话 FF \n 第256话 100 \n 4095 | FFF \n 4096 | 1000 \n 65535 | FFFF \n 65536 | 10000 \n 1048575 | FFFFF \n 1048576 | 100000 \n 16777215 | FFFFFF \n 16777216 | 1000000 \n 268435455 | FFFFFF \n 268435456 | 10000000 \n 4294967295 | FFFFFFFF \n 4294967296 | 100000000 \n 68719476735 | FFFFFFFF \n 68719476736 | 1000000000 \n 1099511627775 | FFFFFFFFFF \n 1099511627776 | 10000000000 \n 17592186044415 | FFFFFFFFFF \n 17592186044416 | 100000000000 \n 281474976710655 | FFFFFFFFFFFF \n 281474976710656 | 1000000000000 \n 4503599627370495 | FFFFFFFFFFFF \n 4503599627370496 | 10000000000000 \n 72057594037927935 | FFFFFFFFFFFFFF \n 72057594037927936 | 100000000000000 \n 1152921504606846975 | FFFFFFFFFFFFFF \n 1152921504606846976 | 1000000000000000 \n 18446744073709551615 | FFFFFFFFFFFFFFFF \n 18446744073709551616 | 10000000000000000 \n 295147905179352825855 | FFFFFFFFFFFFFFFF \n 295147905179352825856 | 100000000000000000 \n 4722366482869645213695 | FFFFFFFFFFFFFFFFFF \n 4722366482869645213696 | 1000000000000000000 \n 75557863725914323419135 | FFFFFFFFFFFFFFFFFF \n 75557863725914323419136 | 10000000000000000000\n
db<> 在这里摆弄
格式掩码的大小并不总是与十六进制值的字符数相同。 您可以使用大格式掩码(大量 x),然后使用LTRIM
删除多余的空格。
WITH
strings (string_val)
AS
(SELECT '28' FROM DUAL
UNION ALL
SELECT '589' FROM DUAL)
SELECT string_val, LTRIM (TO_CHAR (string_val, 'XXXXXXXXXXXXXXXX')) as hex_value
FROM strings;
STRING_VAL HEX_VALUE
_____________ ____________
28 1C
589 24D
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.