Pushdown functions

try_parse_monotonic_iso8601_timestamp parses a subset of ISO 8601 timestamps that matches the 24 character length output of the javascript Date.toISOString() function. Unlike other parsing functions, inputs that fail to parse return NULL instead of error.

This allows try_parse_monotonic_iso8601_timestamp to be used with the temporal filter pushdown feature on text timestamps. This is particularly useful when working with JSON sources, or other external data sources that store timestamps as strings.

Specifically, the accepted format is YYYY-MM-DDThh:mm:ss.sssZ:

  • A 4-digit positive year, left-padded with zeros followed by
  • A literal - followed by
  • A 2-digit month, left-padded with zeros followed by
  • A literal - followed by
  • A 2-digit day, left-padded with zeros followed by
  • A literal T followed by
  • A 2-digit hour, left-padded with zeros followed by
  • A literal : followed by
  • A 2-digit minute, left-padded with zeros followed by
  • A literal : followed by
  • A 2-digit second, left-padded with zeros followed by
  • A literal .
  • A 3-digit millisecond, left-padded with zeros followed by
  • A literal Z, indicating the UTC time zone.

Ordinary text-to-timestamp casts will prevent a filter from being pushed down. Replacing those casts with try_parse_monotonic_iso8601_timestamp can unblock that optimization for your query.

Examples

SELECT try_parse_monotonic_iso8601_timestamp('2015-09-18T23:56:04.123Z') AS ts;
 ts
--------
 2015-09-18 23:56:04.123

SELECT try_parse_monotonic_iso8601_timestamp('nope') AS ts;
 ts
--------
 NULL
Back to top ↑