You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@spark.apache.org by "Max Gekk (Jira)" <ji...@apache.org> on 2026/06/22 21:04:00 UTC

[jira] [Created] (SPARK-57618) Support casting between TIME(p) and TIMESTAMP_NTZ(q)

Max Gekk created SPARK-57618:
--------------------------------

             Summary: Support casting between TIME(p) and TIMESTAMP_NTZ(q)
                 Key: SPARK-57618
                 URL: https://issues.apache.org/jira/browse/SPARK-57618
             Project: Spark
          Issue Type: Sub-task
          Components: SQL
    Affects Versions: 4.3.0
            Reporter: Max Gekk
            Assignee: Max Gekk


h2. Summary

Add bidirectional ANSI casts between the {{TIME(p)}} data type (p in [0, 9]) and
{{TIMESTAMP_NTZ(q)}} (q in [6, 9]), where q=6 is the microsecond {{TimestampNTZType}}
and q in [7, 9] is the nanosecond {{TimestampNTZNanosType}}.

h2. Motivation

Spark already supports {{TIME}} casts to/from {{STRING}}, integral, and {{DECIMAL}}
types, but there is no way to convert between {{TIME}} and {{TIMESTAMP_NTZ}}. These
conversions are required by the SQL standard and are a common user need (e.g. attaching
a time-of-day to a timestamp, or extracting the time-of-day from a timestamp).

h2. Semantics (SQL standard)

* {{CAST(TIMESTAMP_NTZ(q) AS TIME(p))}} (standard rule 15.d): take the hour/minute/second
and fractional fields of the source, truncated to precision {{p}}. Deterministic and
time-zone independent.
* {{CAST(TIME(p) AS TIMESTAMP_NTZ(q))}} (standard rule 17.c): the date fields come from
{{CURRENT_DATE}} and the time fields come from the value. As {{CURRENT_DATE}} is stable
within a query, the cast is stabilized via the existing {{ComputeCurrentTime}} rule so
all references in a query observe the same date (matching {{current_date()}}).

Fractional precision handling is pure truncation (no rounding). Both directions always
succeed, so there is no new nullability or error condition.

h2. Examples

{code:sql}
-- extract time-of-day
SELECT CAST(TIMESTAMP_NTZ'2020-05-17 12:34:56.789012' AS TIME(6));
-- 12:34:56.789012

-- attach the current date
SELECT CAST(TIME'12:34:56.789012345' AS TIMESTAMP_NTZ(9));
-- <current_date> 12:34:56.789012345
{code}

h2. Scope

* Allow the four cast pairs in both ANSI and non-ANSI modes (and TRY): TIME <-> the
NTZ family only; TIMESTAMP_LTZ is intentionally not a valid counterpart.
* Interpreted and codegen paths.
* {{TIME -> TIMESTAMP_NTZ}} is stabilized within a query via {{ComputeCurrentTime}}.

h2. Out of scope

* Structured Streaming batch-timestamp parity for {{TIME -> TIMESTAMP_NTZ}}: the cast
uses the optimizer-instant current date rather than the micro-batch timestamp.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscribe@spark.apache.org
For additional commands, e-mail: issues-help@spark.apache.org