时间运算符

Cypher® 包含以下时间运算符

有关计算结果为时间值类型的其他表达式,请参阅

时间运算符的返回值
运算符 左操作数 右操作数 结果值类型

+

时间瞬时

DURATION

时间瞬时的类型

+

DURATION

时间瞬时

时间瞬时的类型

-

时间瞬时

DURATION

时间瞬时的类型

+

DURATION

DURATION

DURATION

-

DURATION

DURATION

DURATION

*

DURATION

数字

DURATION

*

数字

DURATION

DURATION

/

DURATION

数字

DURATION

添加和减去 DURATION

DURATION 值可以添加到时间瞬时值(如 LOCAL DATETIME)或从中减去。在下面的示例中,localdatetime() 函数用于创建 LOCAL DATETIME 值,duration() 函数用于创建 DURATION 值。

向/从 LOCAL DATETIME 添加和减去 DURATION
WITH localdatetime({year:1984, month:10, day:11, hour:12, minute:31, second:14}) AS aDateTime,
     duration({years: 12, nanoseconds: 2}) AS aDuration
RETURN aDateTime + aDuration AS addition,
      aDateTime - aDuration AS subtraction
结果
加法 减法

1996-10-11T12:31:14.000000002

1972-10-11T12:31:13.999999998

行数:1

当添加或减去一个 DURATION 导致一个不存在的日期时,Cypher 会将日期截断到最接近的有效日期。例如,如果将 1 个月添加到 1 月 31 日,结果将不是 2 月 31 日(一个无效日期),而是 2 月 28 日(或闰年的 2 月 29 日)。

1 月 31 日加 1 个月
RETURN date("2011-01-31") + duration("P1M") AS truncatedDate
结果
truncatedDate

2011-02-28

行数:1

当将两个 DURATION 值添加到时间瞬时值时,应用这些持续时间的顺序会影响结果。

DATE 添加两个 DURATION
RETURN (date("2011-01-31") + duration("P1M")) + duration("P12M") AS date1,
       date("2011-01-31") + (duration("P1M") + duration("P12M")) AS date2

date1 中,持续时间是依次添加的,因此在添加第一个月后日期被截断,结果为 2012-02-28。在 date2 中,持续时间首先合并,然后只进行一次截断,结果为 2012-02-29

结果
date1 date2

2012-02-28

2012-02-29

行数:1

被忽略的组件

当向时间瞬时值添加或从中减去 DURATION 值时,任何不适用于该特定类型的DURATION 组件都将被忽略。(有关时间瞬时值支持哪些组件的信息,请参阅时间瞬时组件)。例如,当向 DATE 添加 DURATION 时,仅考虑 DURATION 值的 yearmonthday 组件,而 hourminutesecondnanosecond 则被忽略。此行为也适用于 LOCAL TIMEZONED TIME

向/从 DATE 添加和减去 DURATION
WITH date({year:1984, month:10, day:11}) AS aDate,
     duration({years: 12, nanoseconds: 2}) AS aDuration
RETURN aDate + aDuration AS addition,
       aDate - aDuration AS subtraction
结果
加法 减法

1996-10-11

1972-10-11

行数:1

乘法和除法 DURATION

在对 DURATION 进行乘法或除法运算时,每个组件都单独处理。在乘法中,每个组件的值乘以给定的因子,而在除法中,每个组件除以给定的数字。如果除法结果不适合原始组件,它会溢出到更小的组件中(例如将天转换为小时)。这种溢出在与分数相乘时也会发生。

乘法和除法 DURATION
WITH duration({days: 14, minutes: 12, seconds: 70, nanoseconds: 1}) AS aDuration
RETURN aDuration,
       aDuration * 2 AS multipliedDuration,
       aDuration / 3 AS dividedDuration
结果
aDuration multipliedDuration dividedDuration

P14DT13M10.000000001S

P28DT26M20.000000002S

P4DT16H4M23.333333333S

行数:1