[
https://issues.apache.org/jira/browse/CALCITE-1296?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15335133#comment-15335133
]
Julian Hyde commented on CALCITE-1296:
--------------------------------------
Sounds reasonable. I think you're just talking about comparison of DATE and
TIMESTAMP, since Calcite doesn't support the other kinds of TIMESTAMP. Does
Oracle allow implicit conversion, e.g. inserting a DATE into a TIMESTAMP
column? If so, is this in scope for this case?
> Different classes of datetime should be able to compare.
> --------------------------------------------------------
>
> Key: CALCITE-1296
> URL: https://issues.apache.org/jira/browse/CALCITE-1296
> Project: Calcite
> Issue Type: Improvement
> Reporter: Jinfeng Ni
> Assignee: Julian Hyde
>
> This is follow-up from a discussion in DRILL-4525. Currently, Calcite does
> not allow the comparison between date vs timestamp; LHS and RHS have to have
> the same type.
> {code}
> select CAST('1990-01-01' AS DATE) < CAST('2001-01-01' AS TIMESTAMP) FROM
> (VALUES(1, 2)) AS T(A,B);
> Mar 24, 2016 8:15:53 AM
> org.apache.calcite.sql.validate.SqlValidatorException <init>
> SEVERE: org.apache.calcite.sql.validate.SqlValidatorException: Cannot
> apply '<' to arguments of type '<DATE> < <TIMESTAMP(0)>'. Supported form(s):
> '<COMPARABLE_TYPE> < <COMPARABLE_TYPE>'
> {code}
> This behavior is different from Oracle and Postgres. Both of them allow
> implicit cast between date and timestamp, and hence allow the comparison.
> It seems to make sense to allow different classes of datetime to be
> comparable in Calcite.
> Oracle:
> {code}
> select count(*) from dual
> where Date '1990-01-01' < TIMESTAMP '1990-01-01 00:01:02';
> 2
> COUNT(*)
> ----------
> 1
> {code}
> Postgres:
> {code}
> select CAST('1990-01-01' AS DATE) < CAST('2001-01-01' AS TIMESTAMP) FROM
> (VALUES(1, 2)) AS T(A,B);
> ?column?
> ----------
> t
> (1 row)
> {code}
> In particular, Oracle doc has the following description [1].
> "
> Datetime Comparisons
> When you compare date and timestamp values, Oracle converts the data to the
> more precise datatype before doing the comparison. For example, if you
> compare data of TIMESTAMP WITH TIME ZONE datatype with data of TIMESTAMP
> datatype, Oracle converts the TIMESTAMP data to TIMESTAMP WITH TIME ZONE,
> using the session time zone.
> The order of precedence for converting date and timestamp data is as follows:
> 1. DATE
> 2. TIMESTAMP
> 3. TIMESTAMP WITH LOCAL TIME ZONE
> 4. TIMESTAMP WITH TIME ZONE
> For any pair of datatypes, Oracle converts the datatype that has a smaller
> number in the preceding list to the datatype with the larger number.
> "
> [1]
> https://docs.oracle.com/cd/B19306_01/server.102/b14225/ch4datetime.htm#i1006333
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)