首批通过分布式安全可靠测评,为关键业务系统打造
CAST_TO_BINARY_DOUBLE
更新时间:2026-04-10 11:58:36
CAST_TO_BINARY_DOUBLE 函数用于将以 RAW 二进制形式表示的 BINARY_DOUBLE 值转换为 BINARY_DOUBLE。
功能适用性
该内容仅适用于 OceanBase 数据库企业版。OceanBase 数据库社区版仅提供 MySQL 模式。
语法
UTL_RAW.CAST_TO_BINARY_DOUBLE (
r IN RAW
endianess IN PLS_INTEGER DEFAULT 1)
RETURN BINARY_DOUBLE;
参数说明
| 参数 | 说明 |
|---|---|
| r | BINARY_DOUBLE 的二进制表示形式。 |
| endianess | 表示 big_endian 或 little-endian 的 BINARY_INTEGER 值。默认值为 big_endian。 |
返回值
返回 BINARY_DOUBLE 值。
使用说明
如果
RAW参数超过 8 个字节,则仅使用前 8 个字节,其余字节被忽略。如果结果为-0,则返回+0。如果结果为NaN,则返回值为BINARY_DOUBLE_NAN。如果
RAW参数小于 8 个字节,则会引发异常VALUE_ERROR。如下列表为一个 8 字节的
BINARY_DOUBLE值与 IEEE 754 双精度格式的映射关系:byte 0: bit 63 ~ bit 56 byte 1: bit 55 ~ bit 48 byte 2: bit 47 ~ bit 40 byte 3: bit 39 ~ bit 32 byte 4: bit 31 ~ bit 24 byte 5: bit 23 ~ bit 16 byte 6: bit 15 ~ bit 8 byte 7: bit 7 ~ bit 0参数
endianess描述了BINARY_DOUBLE的字节如何映射到RAW的字节,如下列矩阵所示。其中,rb0 ~ rb7指的是RAW中的字节,而db0 ~ db7指的是BINARY_DOUBLE中的字节。 | endianess | rb0 | rb1 | rb2 | rb3 | rb4 | rb5 | rb6 | rb7 | | --- | --- | --- | --- | --- | --- | --- | --- | --- | | big_endian | db0 | db1 | db2 | db3 | db4 | db5 | db6 | db7 | | little_endian | db7 | db6 | db5 | db4 | db3 | db2 | db1 | db0 |对于
machine-endian,RAW参数的 8 个字节会被直接复制到返回值BINARY_DOUBLE中。如果用户在大端机上传递了big_endian,或者在小端机上传递了little_endian,效果是一样的。
示例
obclient> SELECT UTL_RAW.CAST_TO_BINARY_DOUBLE('0018FCFF18FCFFFF') FROM DUAL;
+---------------------------------------------------+
| UTL_RAW.CAST_TO_BINARY_DOUBLE('0018FCFF18FCFFFF') |
+---------------------------------------------------+
| 3.4750462962832636E-308 |
+---------------------------------------------------+
1 row in set
obclient> SELECT UTL_RAW.CAST_TO_BINARY_DOUBLE('0018FCFF18FCFFFF', 1) FROM DUAL;
+-----------------------------------------------------+
| UTL_RAW.CAST_TO_BINARY_DOUBLE('0018FCFF18FCFFFF',1) |
+-----------------------------------------------------+
| 3.4750462962832636E-308 |
+-----------------------------------------------------+
1 row in set
obclient> SELECT UTL_RAW.CAST_TO_BINARY_DOUBLE('0018FCFF18FCFFFF', 2) FROM DUAL;
+-----------------------------------------------------+
| UTL_RAW.CAST_TO_BINARY_DOUBLE('0018FCFF18FCFFFF',2) |
+-----------------------------------------------------+
| Nan |
+-----------------------------------------------------+
1 row in set
obclient> SELECT UTL_RAW.CAST_TO_BINARY_DOUBLE('0018FCFF18FCFFFF', 3) FROM DUAL;
+-----------------------------------------------------+
| UTL_RAW.CAST_TO_BINARY_DOUBLE('0018FCFF18FCFFFF',3) |
+-----------------------------------------------------+
| Nan |
+-----------------------------------------------------+
1 row in set