You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@calcite.apache.org by "Julian Hyde (Jira)" <ji...@apache.org> on 2022/12/17 03:33:00 UTC

[jira] [Commented] (CALCITE-5436) Implement DATE_SUB, TIME_SUB, TIMESTAMP_SUB (compatible w/ BigQuery)

    [ https://issues.apache.org/jira/browse/CALCITE-5436?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17648852#comment-17648852 ] 

Julian Hyde commented on CALCITE-5436:
--------------------------------------

Mathematical identities do not always hold in finite computer representations.

In int32 arithmetic, there's an edge case where 'x - y' is not equivalent to 'x + (- y)', namely where y = -2^31. The same situation exists in Calcite's date/time arithmetic too. So I'd avoid using that identity.

SqlStdOperatorTable already has MINUS_DATE and DATETIME_PLUS (shame that the names are not consistent) so I recommend that you create a function analog of each.

> Implement DATE_SUB, TIME_SUB, TIMESTAMP_SUB (compatible w/ BigQuery)
> --------------------------------------------------------------------
>
>                 Key: CALCITE-5436
>                 URL: https://issues.apache.org/jira/browse/CALCITE-5436
>             Project: Calcite
>          Issue Type: Sub-task
>            Reporter: Tanner Clary
>            Assignee: Tanner Clary
>            Priority: Major
>
> Implement BigQuery's {{TIME_SUB}}, {{TIMESTAMP_SUB}}, and {{DATE_SUB}} functions. Each of these functions follows similar behavior, the primary difference being whether the specified interval is being subtracted from a {{TIME}}, {{TIMESTAMP}}, or {{DATE}} expression. Examples for each are provided below:
> [TIME_SUB|https://cloud.google.com/bigquery/docs/reference/standard-sql/time_functions#time_sub]: {{TIME_SUB(TIME '15:30:00', INTERVAL 10 MINUTE)}} would output '15:20:00'.
> [TIMESTAMP_SUB|https://cloud.google.com/bigquery/docs/reference/standard-sql/timestamp_functions#timestamp_sub]: {{TIMESTAMP_SUB(TIMESTAMP '2008-12-25 15:30:00, INTERVAL 1 HOUR)}} would output '2008-12-25 14:30:00'.
> [DATE_SUB|https://cloud.google.com/bigquery/docs/reference/standard-sql/date_functions#date_sub]: {{DATE_SUB(DATE '2008-12-25', INTERVAL 2 DAY)}} would output '2008-12-27'.



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