时间运算符

Cypher® 包含以下时间运算符

有关求值为时间值类型的其他表达式,请参阅

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

+

时间点

DURATION(持续时间)

时间点的类型

+

DURATION(持续时间)

时间点

时间点的类型

-

时间点

DURATION(持续时间)

时间点的类型

+

DURATION(持续时间)

DURATION(持续时间)

DURATION(持续时间)

-

DURATION(持续时间)

DURATION(持续时间)

DURATION(持续时间)

*

DURATION(持续时间)

Number

DURATION(持续时间)

*

Number

DURATION(持续时间)

DURATION(持续时间)

/

DURATION(持续时间)

Number

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 月 31 日增加 1 个月,结果将不是 2 月 31 日(无效日期),而是 2 月 28 日(闰年为 29 日)。

在 1 月 31 日的基础上增加 1 个月
RETURN date("2011-01-31") + duration("P1M") AS truncatedDate
结果
truncatedDate

2011-02-28

行:1

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

将两个 DURATION 值添加到 DATE
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 组件都将被忽略。(有关时间点值支持哪些组件的信息,请参阅 时间点组件)。例如,当将 DURATION 添加到 DATE 时,仅考虑 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

© . This site is unofficial and not affiliated with Neo4j, Inc.