Temporal types
Temporal types can be stored as properties of a vertex or edge. The user can use Cypher queries or procedures to read or write these properties. The following table summarizes the temporal types that Memgraph currently supports:
name | description |
---|---|
Duration | Data type that represents a period of time. |
Date | Data type that represents a date with year, month, and day. |
LocalTime | Data type that represents time within a day without timezone. |
LocalDateTime | Data type that represents a date and local time. |
All types excluding Duration
are ISO 8601 compliant.
Duration
You can create Duration
from a string or a map by calling the function
duration
.
For strings, the duration format is: P[nD]T[nH][nM][nS]
where n
stands for
number, and the capital letters are used as a separator with each field in []
marked optional. For strings, Memgraph only allows the last field to be a double,
e.g., P2DT2.5H
. However, for maps, every field can be a double, an int or a
mixture of both. We also support negative durations.
name | description |
---|---|
D | Days |
H | Hours |
M | Minutes |
S | Seconds |
Example:
CREATE (:F1Laps {lap: duration("PT2M2.33S")});
Maps can contain the following six fields: day
, hour
, minute
, second
, millisecond
and microsecond
.
Example:
CREATE (:F1Laps {lap: duration({minute:2, second:2, microsecond:33})});
At this point, it must be pointed out that durations internally hold microseconds. Each of the fields specified above is first converted to microseconds and then reduced by addition to a single value. This has an interesting use case:
CREATE (:F1Laps {lap: duration({minute:2, second:-2, microsecond:-33})});
This converts minutes
, seconds
to microseconds
and effectively produces
the following equation: minutes - seconds - microseconds
.
Each of the individual fields of a duration can be accessed through its properties as follows:
name | description |
---|---|
day | Converts all the microseconds back to days and returns the value. |
hour | Subtracts days and returns the leftover value as hours. |
minute | Subtracts the days and returns the leftover value as minutes. |
second | Subtracts the days and returns the leftover value as seconds. |
millisecond | Subtracts the days and returns the leftover value as milliseconds. |
microsecond | Subtracts the days and returns the leftover value as microseconds. |
nanosecond | Subtracts the days and returns the leftover value as nanoseconds. |
Example:
CREATE (:F1Laps {lap: duration({day:1, hour: 2, minute:3, second:4})});
MATCH (f:F1Laps) RETURN f.lap.day;
// Result
>> 1
MATCH (f:F1Laps) RETURN f.lap.hour;
// Result
>> 2
MATCH (f:F1Laps) RETURN f.lap.minute;
// Result
>> 123 // The value without days is 2 hours and 3 minutes, that is 123 minutes
MATCH (f:F1Laps) RETURN f.lap.second;
// Result
>> 7384 // The value without days is 2 hours, 3 minutes and 4 seconds, that is 7384 minutes
Date
You can create Date
from a string or map by calling the function Date
. For
strings, the date format is specified by the ISO 8601: YYYY-MM-DD
or
YYYYMMDD
or YYYY-MM
.
name | description |
---|---|
Y | Year |
M | Month |
D | Day |
The smallest year is 0
and the highest is 9999
.
You can call date
without arguments. This effectively sets the date field to
the current date of the calendar (UTC clock).
Example:
CREATE (:Person {birthday: date("1947-07-30")});
For maps, three fields are available: year
, month
, day
.
Example:
CREATE (:Person {birthday: date({year:1947, month:7, day:30})});
You can access the individual fields of a date through its properties:
name | description |
---|---|
year | Returns the year field |
month | Returns the month field |
day | Returns the day field |
Example:
MATCH (b:Person) RETURN b.birthday.year;
LocalTime
You can create LocalTime
from a string or map by calling the function
localTime
. For strings, the local time format is specified by the ISO 8601:
[T]hh:mm:ss
or [T]hh:mm
or [T]hhmmss
or [T]hhmm
or [T]hh
.
name | description |
---|---|
h | Hours |
m | Minutes |
s | Seconds |
seconds
can be defined as decimal fractions with up to 6 digits. The first 3
digits represent milliseconds, and the last 3 digits microseconds. For example,
the string T22:10:32.300600
specifies 300
milliseconds and 600
microseconds.
You can call localTime
without arguments. This effectively sets the time field
to the current time of the calendar (UTC clock).
Example:
CREATE (:School {Calculus: localTime("09:15:00")});
For maps, there are 5 fields available: hour
, minute
, second
,
millisecond
and microsecond
.
Example:
CREATE (:School {Calculus: localTime({hour:9, minute:15})});
You can access the individual fields of a LocalTime through its properties:
name | description |
---|---|
hour | Returns the hour field |
minute | Returns the minute field |
second | Returns the second field |
millisecond | Returns the millisecond field |
microsecond | Returns the microsecond field |
Example:
MATCH (s:School) RETURN s.Calculus.hour;
LocalDateTime
You can create LocalDateTime
from a string or map by calling the function
localDateTime
. For strings, the local time format is specified by the ISO
8601: YYYY-MM-DDThh:mm:ss
or YYYY-MM-DDThh:mm
or YYYYMMDDThhmmss
or
YYYYMMDDThhmm
or YYYYMMDDThh
.
name | description |
---|---|
Y | Year |
M | Month |
D | Day |
h | Hours |
m | Minutes |
s | Seconds |
You can call localDateTime
without arguments. This effectively sets the date
and time fields to the current date and time of the calendar (UTC clock).
Example:
CREATE (:Flights {AIR123: localDateTime("2021-10-05T14:15:00")});
For maps the following fields are available: year
, month
, day
, hour
,
minute
, second
, millisecond
and microsecond
.
Example:
CREATE (:Flights {AIR123: localDateTime(year:2021, month:10, day:5, hour:14, minute:15)});
You can access the individual fields of LocalDateTime through its properties:
name | description |
---|---|
year | Returns the year field |
month | Returns the month field |
day | Returns the day field |
hour | Returns the hour field |
minute | Returns the minute field |
second | Returns the second field |
millisecond | Returns the millisecond field |
microsecond | Returns the microsecond field |
Example:
MATCH (f:Flights) RETURN f.AIR123.year;
Temporal types arithmetic
Temporal types support native arithmetic, and the operations are summarized in the following table:
Duration operations:
op | result |
---|---|
Duration + Duration | Duration |
Duration - Duration | Duration |
- Duration | Duration |
Date operations:
op | result |
---|---|
Date + Duration | Date |
Duration + Date | Date |
Date - Duration | Date |
Date - Date | Duration |
LocalTime operations:
op | result |
---|---|
LocaTtime + Duration | LocalTime |
Duration + LocalTime | LocalTime |
LocalTime - Duration | LocalTime |
LocalTime - LocalTime | Duration |
LocalDateTime operations:
operation | result |
---|---|
LocalDateTime + Duration | LocalDateTime |
Duration + LocalTateTime | LocalDateTime |
LocalDateTime - Duration | LocalDateTime |
LocalDateTime - LocalDateTime | Duration |
Procedures API
Temporal types can also be used within query modules. Check out the documentation for the Pyhon API and C API.