日期和时间类型
本文介绍日期和时间的类型,包括DATE
、TIME
、DATETIME
和TIMESTAMP
。
在插入时间类型的属性值时,Nebula Graph会根据配置文件中timezone_name
参数指定的时区,将该时间值(TIMESTAMP
类型例外)转换成相应的世界协调时间(UTC)时间。在查询中返回的时间类型值为UTC时间。
函数
date()
、time()
、datetime()
和timestamp()
可以用空值获取当前的日期或时间。函数
date()
、time()
和datetime()
可以用属性名称获取自身的某一个具体属性值,例如date().month
获取当前月份、time("02:59:40").minute
获取传入时间的分钟数。
openCypher兼容性
支持年、月、日、时、分、秒,不支持毫秒。
不支持函数
localdatetime()
和duration()
。不支持大部分字符串时间格式,仅支持
YYYY-MM-DDThh:mm:ss
。
DATE
DATE
包含日期,但是不包含时间。Nebula Graph检索和显示DATE
的格式为YYYY-MM-DD
。支持的范围是-32768-01-01
到32767-12-31
。
date()
支持的属性名称包括year
、month
和day
。
TIME
TIME
包含时间,但是不包含日期。Nebula Graph检索和显示TIME
的格式为hh:mm:ss.msmsmsususus
。支持的范围是00:00:00.000000
到23:59:59.999999
。
time()
支持的属性名称包括hour
、minute
和second
。
DATETIME
DATETIME
包含日期和时间。Nebula Graph检索和显示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
。
TIMESTAMP
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。
示例
创建Tag,名称为
date1
,包含DATE
、TIME
和DATETIME
三种类型。nebula> CREATE TAG 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 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 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}) AS d RETURN d;
+-----------------+
| d |
+-----------------+
| 12:31:14.000000 |
+-----------------+
nebula> WITH date({year: 1984, month: 10, day: 11}) AS x RETURN x + 1;
+------------+
| x |
+------------+
| 1984-10-12 |
+------------+