日期和时间类型

本文介绍日期和时间的类型,包括DATETIMEDATETIMETIMESTAMP

在插入时间类型的属性值时,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-0132767-12-31

date()支持的属性名称包括yearmonthday

TIME

TIME包含时间,但是不包含日期。Nebula Graph检索和显示TIME的格式为hh:mm:ss.msmsmsususus。支持的范围是00:00:00.00000023:59:59.999999

time()支持的属性名称包括hourminutesecond

DATETIME

DATETIME包含日期和时间。Nebula Graph检索和显示DATETIME的格式为YYYY-MM-DDThh:mm:ss.msmsmsususus。支持的范围是-32768-01-01T00:00:00.00000032767-12-31T23:59:59.999999

datetime()支持的属性名称包括yearmonthdayhourminutesecond

TIMESTAMP

TIMESTAMP包含日期和时间。支持的范围是UTC时间的1970-01-01T00:00:012262-04-11T23:47:16

TIMESTAMP还有以下特点:

  • 以时间戳形式存储和显示。例如1615974839,表示2021-03-17T17:53:59

  • 查询TIMESTAMP的方式包括时间戳和timestamp()函数。

  • 插入TIMESTAMP的方式包括时间戳、timestamp()函数和now()函数。

  • timestamp()函数支持传入空值获取当前时区的时间戳,还接受string类型的参数。

    1. # 传入当前时间。
    2. nebula> return timestamp();
    3. +-------------+
    4. | timestamp() |
    5. +-------------+
    6. | 1625469277 |
    7. +-------------+
    8. # 传入指定时间。
    9. nebula> return timestamp("2021-07-05T06:18:43.984000");
    10. +-----------------------------------------+
    11. | timestamp("2021-07-05T06:18:43.984000") |
    12. +-----------------------------------------+
    13. | 1625465923 |
    14. +-----------------------------------------+
  • 底层存储的数据格式为64位int

示例

  1. 创建Tag,名称为date1,包含DATETIMEDATETIME三种类型。

    1. nebula> CREATE TAG date1(p1 date, p2 time, p3 datetime);
  2. 插入点,名称为test1

    1. nebula> INSERT VERTEX date1(p1, p2, p3) VALUES "test1":(date("2021-03-17"), time("17:53:59"), datetime("2021-03-17T17:53:59"));
  3. 获取test1的属性p1的月份。

    1. nebula> CREATE TAG INDEX date1_index ON date1(p1);
    2. nebula> REBUILD TAG INDEX date1_index;
    3. nebula> MATCH (v:date1) RETURN v.p1.month;
    4. +------------+
    5. | v.p1.month |
    6. +------------+
    7. | 3 |
    8. +------------+
  4. 创建Tag,名称为school,包含TIMESTAMP类型。

    1. nebula> CREATE TAG school(name string , found_time timestamp);
  5. 插入点,名称为DUT,存储时间为"1988-03-01T08:00:00"

    1. # 时间戳形式插入,1988-03-01T08:00:00对应的时间戳为573177600,转换为UTC时间为573206400。
    2. nebula> INSERT VERTEX school(name, found_time) VALUES "DUT":("DUT", 573206400);
    3. # 日期和时间格式插入。
    4. nebula> INSERT VERTEX school(name, found_time) VALUES "DUT":("DUT", timestamp("1988-03-01T08:00:00"));
  6. 插入点,名称为dut,用now()timestamp()函数存储时间。

    1. # 用now()函数存储时间
    2. nebula> INSERT VERTEX school(name, found_time) VALUES "dut":("dut", now());
    3. # 用timestamp()函数存储时间
    4. nebula> INSERT VERTEX school(name, found_time) VALUES "dut":("dut", timestamp());

还可以使用WITH语句设置具体日期和时间,例如:

  1. nebula> WITH time({hour: 12, minute: 31, second: 14}) AS d RETURN d;
  2. +-----------------+
  3. | d |
  4. +-----------------+
  5. | 12:31:14.000000 |
  6. +-----------------+
  7. nebula> WITH date({year: 1984, month: 10, day: 11}) AS x RETURN x + 1;
  8. +------------+
  9. | x |
  10. +------------+
  11. | 1984-10-12 |
  12. +------------+