数值¶
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
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。