[
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)