日期和时间类型Graph
本文介绍日期和时间的类型,包括DATE、TIME、DATETIME和TIMESTAMP。
在插入时间类型的属性值时,NebulaGraph 会根据Graph中timezone_name参数指定的时区,将该时间值(TIMESTAMP类型例外)转换成相应的世界协调时间(UTC)时间。
Note
如需修改当前时区,请同时修改所有服务的配置文件中的timezone_name参数。
- 函数
date()、time()、datetime()和timestamp()可以用空值获取当前的日期或时间。
- 函数
date()、time()和datetime()可以用属性名称获取自身的某一个具体属性值,例如date().month获取当前月份、time("02:59:40").minute获取传入时间的分钟数。
openCypher 兼容性Graph
- 支持年、月、日、时、分、秒,不支持毫秒。
- 不支持函数
localdatetime()和duration()。
- 不支持大部分字符串时间格式,支持
YYYY-MM-DDThh:mm:ss和YYYY-MM-DD hh:mm:ss。
DATEGraph
DATE包含日期,但是不包含时间。NebulaGraph 检索和显示DATE的格式为YYYY-MM-DD。支持的范围是-32768-01-01到32767-12-31。
date()支持的属性名称包括year、month和day。
TIMEGraph
TIME包含时间,但是不包含日期。NebulaGraph 检索和显示TIME的格式为hh:mm:ss.msmsmsususus。支持的范围是00:00:00.000000到23:59:59.999999。
time()支持的属性名称包括hour、minute和second。
DATETIMEGraph
DATETIME包含日期和时间。NebulaGraph 检索和显示DATETIME的格式为YYYY-MM-DDThh:mm:ss.msmsmsususus。支持的范围是-32768-01-01T00:00:00.000000到32767-12-31T23:59:59.999999。
datetime()支持的属性名称包括year、month、day、hour、minute和second。
TIMESTAMPGraph
TIMESTAMP包含日期和时间。支持的范围是 UTC 时间的1970-01-01T00:00:01到2262-04-11T23:47:16。
TIMESTAMP还有以下特点:
- 以时间戳形式存储和显示。例如
1615974839,表示2021-03-17T17:53:59。
- 查询
TIMESTAMP的方式包括时间戳和timestamp()函数。
- 插入
TIMESTAMP的方式包括时间戳、timestamp()函数和now()函数。
-
timestamp()函数支持传入空值获取当前时区的时间戳,还接受 string 类型的参数。# 传入当前时间。 nebula> RETURN timestamp(); +-------------+ | timestamp() | +-------------+ | 1625469277 | +-------------+ # 传入指定时间。 nebula> RETURN timestamp("2021-07-05T06:18:43.984000"); +-----------------------------------------+ | timestamp("2021-07-05T06:18:43.984000") | +-----------------------------------------+ | 1625465923 | +-----------------------------------------+
- 底层存储的数据格式为 64 位 int。
示例Graph
-
创建 Tag,名称为
date1,包含DATE、TIME和DATETIME三种类型。nebula> CREATE TAG IF NOT EXISTS date1(p1 date, p2 time, p3 datetime); -
插入点,名称为
test1。nebula> INSERT VERTEX date1(p1, p2, p3) VALUES "test1":(date("2021-03-17"), time("17:53:59"), datetime("2021-03-17T17:53:59")); -
获取
test1的属性p1的月份。nebula> CREATE TAG INDEX IF NOT EXISTS date1_index ON date1(p1); nebula> REBUILD TAG INDEX date1_index; nebula> MATCH (v:date1) RETURN v.p1.month; +------------+ | v.p1.month | +------------+ | 3 | +------------+ -
创建 Tag,名称为
school,包含TIMESTAMP类型。nebula> CREATE TAG IF NOT EXISTS school(name string , found_time timestamp); -
插入点,名称为
DUT,存储时间为"1988-03-01T08:00:00"。# 时间戳形式插入,1988-03-01T08:00:00 对应的时间戳为 573177600,转换为 UTC 时间为 573206400。 nebula> INSERT VERTEX school(name, found_time) VALUES "DUT":("DUT", 573206400); # 日期和时间格式插入。 nebula> INSERT VERTEX school(name, found_time) VALUES "DUT":("DUT", timestamp("1988-03-01T08:00:00")); -
插入点,名称为
dut,用now()或timestamp()函数存储时间。# 用 now() 函数存储时间 nebula> INSERT VERTEX school(name, found_time) VALUES "dut":("dut", now()); # 用 timestamp() 函数存储时间 nebula> INSERT VERTEX school(name, found_time) VALUES "dut":("dut", timestamp());
还可以使用WITH语句设置具体日期和时间,例如:
nebula> WITH time({hour: 12, minute: 31, second: 14, millisecond:111, microsecond: 222}) AS d RETURN d;
+-----------------+
| d |
+-----------------+
| 12:31:14.111222 |
+-----------------+
nebula> WITH date({year: 1984, month: 10, day: 11}) AS x RETURN x + 1;
+------------+
| (x+1) |
+------------+
| 1984-10-12 |
+------------+