跳转至
开发版采用单机部署,无需产品 License 文件。需要多机部署或大规模性能测试? 了解企业版

数值

GQL 支持整数、浮点数和任意精度数。整数可以有符号或无符号,而浮点数和任意精度数都是有符号的。

有符号指可以为正数、负数或零(默认为正数);无符号指只能为非负数。

有符号整数

有符号整数可以是非负数(正数或零)或负数。

下表列出了有符号整数的类型及其取值范围。

类型 声明关键字 取值范围
INT64 INT和INT64 -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
INT32 INT32 -2,147,483,648 ~ 2,147,483,647
INT16 INT16 -32,768 ~ 32,767
INT8 INT8 -128 ~ 127

无符号整数

无符号整数总是非负数。

下表列出了无符号整数的类型及其取值范围。

类型 声明关键字 取值范围
UINT64 UINT和UINT64 0 ~ 18,446,744,073,709,551,615
UINT32 UINT32 0 ~ 4,294,967,295
UINT16 UINT16 0 ~ 65,535
UINT8 UINT8 0 ~ 255

浮点数

GQL 支持单精度浮点数(FLOAT)和双精度浮点数(DOUBLE)。

类型 声明关键字 取值范围
FLOAT32 FLOAT32, FLOAT 3.4E +/- 38
FLOAT64 FLOAT64, DOUBLE 1.7E +/- 308

支持科学计数法,例如1e2、1.1e2、.3e4、1.e4和-1234E-10。

特殊值

FLOAT(FLOAT32)和DOUBLE(FLOAT64)类型支持以下特殊值:

表达式 描述 类型
1.0f/0.0、1.0d/0.0 正无穷 FLOAT / DOUBLE
-1.0f/0.0、-1.0d/0.0 负无穷 FLOAT / DOUBLE
0.0f/0.0、0.0d/0.0 非数值 FLOAT / DOUBLE

Note

f和d分别表示FLOAT(FLOAT32)和DOUBLE(FLOAT64)类型。

这些特殊值也可以通过转换字符串来创建。更多信息,请参见特殊值的转换。

任意精度数

任意精度数用于存储对精确度要求较高且位数较多的数值。

语法

arbitrary_precision_number
DECIMAL DEC precision , scale

arbitrary_precision_number ::=
    ( 'DECIMAL' | 'DEC' ) (precision (',' scale)? )?

精度(precision)是整数部分和小数部分的总位数,其取值范围为 1 到 256。

小数位数(scale)是小数点后的位数,其取值范围为 0 到 128。小数位数不能大于精度。

默认值

如果精度和小数位数均未指定,则精度默认取值为 10,小数位数默认取值为 0。

如果只指定了精度,则小数位数默认取值为 0。

规则

如果声明的精度和小数位数相同,则只能存储绝对值小于 1 的小数。例如,DECIMAL(3, 3)只能存储范围在 -0.999 到 0.999 之间的值。

如果小数点左侧的数字位数大于声明的精度和小数位数之间的差值,将返回错误。例如,如果声明的精度为 4,声明的小数位数为 2,则无法存储值 123.4。

如果小数点右侧的数字位数大于声明的小数位数,则将四舍五入到声明的小数位数。例如,如果声明的精度为 4,声明的小数位数为 2,则值 1.234 将存储为 1.23。

如果小数点右侧的数字位数小于声明的小数位数,则在值的右侧填充零,以匹配声明的小数位数。例如,如果声明的精度为 4,声明的小数位数为 2,则值 12.3 将显示为 12.30。

声明示例

示例 1:

'''
CREATE GRAPH TYPE IF NOT EXISTS person AS  
    { NODE Person 
        ( { 
            id INT64 PRIMARY KEY,  
            salary DECIMAL(10, 4) DEFAULT 10000.00M, 
            is_adult BOOL DEFAULT TRUE,  
            name STRING DEFAULT 'John Doe',  
            hobbies LIST<STRING> DEFAULT ['reading', 'swimming'], 
            birthday DATE DEFAULT DATE('1990-01-01') 
        } ) 
    }
'''

在上述示例中,属性id的数据类型为整数(INT64),属性salary的数据类型为任意精度数(DECIMAL(10, 4))。

示例 2:

'''
CREATE GRAPH TYPE IF NOT EXISTS person2 AS  
    { NODE Person 
        ( { 
            id INT64 PRIMARY KEY,  
            salary DECIMAL 
        } ) 
    }
'''

在上述示例中,属性salary的数据类型为任意精度数(DECIMAL),默认精度为 10,默认小数位数为 0。

更多信息

数值字面量