DOUBLE PRECISION (FLOAT)

Vertica 支持数字数据类型 DOUBLE PRECISION,此为 IEEE-754 8 位浮点类型,适用于大多数常规浮点运算。

语法

[ DOUBLE PRECISION | FLOAT | FLOAT(n) | FLOAT8 | REAL ]

参数

双精度是一种非精确、精度可变的数字类型。换言之,某些值无法精确表示,而是存储为近似值。因此,涉及双精度的输入和输出操作可能会有些许偏差。

  • 所有 DOUBLE PRECISION 数据类型都等同于 64 位 IEEE 浮点型。

  • FLOAT(n) 中的 n 必须介于 1 和 53 之间(包含),但始终使用 53 位小数。有关详细信息,请参阅 IEEE-754 标准。

  • 要进行精确的数字存储和计算(例如对于金钱),请使用 NUMERIC

  • 浮点计算受限于底层处理器、操作系统和编译器的行为。

  • 比较两个浮点值是否相等,结果可能与预期不符。

  • 虽然 Vertica 在内部将十进制值视为 FLOAT,但如果将列定义为 FLOAT,则您无法从 ORC 和 Parquet 文件中读取十进制值。在这些格式中,FLOATDECIMAL 是不同的类型。

接受以下格式的浮点数据:

  • 前置空格(可选)

  • 加号 ("+") 或减号 ("-")(可选)

  • 十进制数、十六进制数、无穷大、NAN 或 NULL 值。

十进制数

十进制数由一组非空十进制数字序列组成,可能包含基点字符(小数点 "."),其后可跟十进制指数(可选)。十进制指数表示乘以 10 的若干次幂,其构成为:字母 E 或 e,后跟加号或减号(可选),之后跟一组非空十进制数字序列。

十六进制数

十六进制数由 "0x" 或 "0X" 后跟一组非空十六进制数字序列构成,可能包含基点字符,其后可跟二进制指数(可选)。二进制指数表示乘以 2 的若干次幂,其构成为:字母 "P" 或 "p" ,后跟加号或减号(可选),之后跟一组非空十进制数字序列。基点字符和二进制指数这两者必须至少出现一个。

无穷大

无穷大为 INFINFINITY,表示忽略的情况。

NaN(非数值)

NaN 为 NAN(忽略的情况),其后可跟括在括号内的字符序列(可选)。字符串以实现相关的方式指定 NaN 的值。(在 x86 机器上,NAN 在 Vertica 内部表示为 0xfff8000000000000LL。)

将无穷大或 NAN 值作为常数写入 SQL 语句时,需加单引号。例如:

=> UPDATE table SET x = 'Infinity'

后面提供了 NaN 的一个示例。

=> SELECT CBRT('Nan'); -- cube root
 CBRT 
------
 NaN
(1 row)
=> SELECT 'Nan' > 1.0;
 ?column?
----------
 f
(1 row)

Null 值

Null 值的加载文件格式是用户定义的,如 COPY 命令中所述。Null 值在 Vertica 内部表示为 0x7fffffffffffffffLL。交互格式由 vsql 打印选项 null 控制。例如:

\pset null '(null)'

默认选项为不打印任何内容。

规则

  • -0 == +0

  • 1/0 = 无穷大

  • 0/0 == Nan

  • NaN != 任意值(甚至 NaN)

要搜索 NaN 列值,请使用以下谓词:

... WHERE column != column

这是必要的,因为根据定义,WHERE *column *= 'Nan' 不能为 true。

排序顺序(升序)

  • NAN

  • -Inf

  • 数字

  • +Inf

  • NULL

注意

  • NULL 按照升序在最后显示(最大值)。

  • 按照 IEEE 浮点标准,浮点数中的所有溢出均会生成 +/- 无穷大或 NaN。