- If the Period expressions do not overlap, the result is NULL. If either Period expression is NULL, the result is NULL. Otherwise, the result has a Period data type that is comparable to the Period expressions.
- If the Period expressions have PERIOD(TIMESTAMP(n) [WITH TIME ZONE]) or PERIOD(TIME(n) [WITH TIME ZONE]) data types but different precisions, the result is a Period value of the higher precision data type. If neither Period expression has a time zone, the resulting period does not have a time zone; otherwise, the resulting period has a time zone and the value of the time zone in the result is determined using the following rules:
- If both Period expressions have a time zone, the time zone displacement of a result bound is obtained from the corresponding bound of the Period expression as defined by the Period value constructor that follows.
- If only one of the Period expressions has a time zone, the other Period expression is considered to be at the current session time zone and the result is computed as follows.
Assuming p1 and p2 are Period expressions and the result element type as determined above is rt, the result of p1 P_INTERSECT p2 is as follows if p1 OVERLAPS p2 is TRUE:
PERIOD( CASE WHEN CAST(BEGIN(p1) AS rt) >= CAST(BEGIN(p2) AS rt) THEN CAST(BEGIN(p1) AS rt) ELSE CAST(BEGIN(p2) AS rt) END, CASE WHEN CAST(END(p1) AS rt) <= CAST(END(p2) AS rt) THEN CAST(END(p1) AS rt) ELSE CAST(END(p2) AS rt) END)
Internally, Period values are saved in UTC and the OVERLAPS operator is evaluated using these UTC represented formats and the P_INTERSECT operation is performed if they overlap.