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

Eric Richardson commented on HIVE-22285:
----------------------------------------

Same behavior with casting from string to int.
{code:sql}
CREATE TABLE IF NOT EXISTS castTestInt (rowId BIGINT, intString STRING, 
expectedResult BOOLEAN) STORED AS ORC;
TRUNCATE TABLE castTestInt;
INSERT INTO TABLE castTestInt VALUES(0,'2019',true);
INSERT INTO TABLE castTestInt VALUES(1,null,false);
INSERT INTO TABLE castTestInt VALUES(2,'          ',false);
INSERT INTO TABLE castTestInt VALUES(3,'',false);
INSERT INTO TABLE castTestInt VALUES(4,'not an int',false);
SELECT
   rowId,
  intString,
  CAST(intString AS INT) as intInt,
  CAST(intString AS INT) IS NOT NULL AS actualResult,
  expectedResult,
  nullIf(CAST(intString AS INT),null) IS NOT NULL AS workAroundResult
FROM castTestInt;
DROP TABLE IF EXISTS castTestInt;
{code}
{code:sql}
+--------+-------------+---------+---------------+-----------------+-------------------+
| rowid  |  intstring  | intint  | actualresult  | expectedresult  | 
workaroundresult  |
+--------+-------------+---------+---------------+-----------------+-------------------+
| 0      | 2019        | 2019    | true          | true            | true       
       |
| 1      | NULL        | NULL    | false         | false           | false      
       |
| 2      |             | NULL    | true          | false           | false      
       |
| 3      |             | NULL    | true          | false           | false      
       |
| 4      | not an int  | NULL    | true          | false           | false      
       |
+--------+-------------+---------+---------------+-----------------+-------------------+
5 rows selected (1.768 seconds)
{code}

> CAST function does not immediately return null if conversion does not succeed
> -----------------------------------------------------------------------------
>
>                 Key: HIVE-22285
>                 URL: https://issues.apache.org/jira/browse/HIVE-22285
>             Project: Hive
>          Issue Type: Bug
>          Components: Hive
>    Affects Versions: 3.1.0
>         Environment: HDP 3.1.0
> Hive 3.1.0.3.1.0.0-78
> Query via DAS 1.3.0 or beeline 3.1.0.3.1.0.0-78
>            Reporter: Eric Richardson
>            Priority: Major
>
> When cast is called on a column (or derived column) and the cast does not 
> succeed it is supposed to return null.  Which is what it returns at the end 
> of the query, but some evaluations within the query do not evaluate to null, 
> unless the predicate of the cast is null.
> ex:
> {code:sql}
> cast('something that is not a date' as date){code}
> will return null
>  
> {code:sql}
> cast('something that is not a date' as date) is NOT null{code}
> will return true (which is wrong)
>  
> {code:sql}
> cast(null as date) is NOT null
> {code}
> will return false (which is correct)
>  
> full example to demonstrate problem
> {code:sql}
> CREATE TABLE IF NOT EXISTS castTest (rowId BIGINT, dateString STRING, 
> expectedResult BOOLEAN) STORED AS ORC;
> TRUNCATE TABLE castTest;
> INSERT INTO TABLE castTest VALUES(0,'2019-10-02',true);
> INSERT INTO TABLE castTest VALUES(1,null,false);
> INSERT INTO TABLE castTest VALUES(2,'          ',false);
> INSERT INTO TABLE castTest VALUES(3,'',false);
> INSERT INTO TABLE castTest VALUES(4,'not a date',false);
> SELECT
>   rowId,
>   dateString,
>   CAST(dateString AS DATE) as dateDate,
>   CAST(dateString AS DATE) IS NOT NULL AS actualResult,
>   expectedResult,
>   nullIf(CAST(dateString AS DATE),null) IS NOT NULL AS workAroundResult
> FROM castTest;
> DROP TABLE IF EXISTS castTest;
> {code}
>  returns
> {code:sql}
> ROWID  DATESTRING  DATEDATE    ACTUALRESULT  EXPECTEDRESULT  WORKAROUNDRESULT
> 0      2019-10-02  2019-10-02  true          true            true
> 1      null        null        false         false           false
> 2                  null        true          false           false
> 3      ""          null        true          false           false
> 4      not a date  null        true          false           false
> {code}
> Expected result is true if the date string was a valid convertible date 
> string, false otherwise.
>  Query (incorrectly) returns true for actual result when dateString is empty, 
> whitespace, or characters.
> Query only returns correct result when dateString is convertible or null.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to