[
https://issues.apache.org/jira/browse/HIVE-11392?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14645056#comment-14645056
]
Jason Dere commented on HIVE-11392:
-----------------------------------
What's going on here is that in Hive, string literals (like '1 '), are of type
String, not of type char. This affects how the comparison is being done.
Char-to-String comparisons result in the values being converted to the common
type between the two types (string).
So cast('1' as char(4)) = cast('1 ' as string) ends up looking like cast('1' as
string) = cast('1 ' as string). For String (as well as varchar), trailing
spaces is significant during comparison which is why you do not see any
results with that predicate.
As you noticed, the char-to-char comparison shows the correct results (cast('1'
as char(4)) compares as equal to cast('1 ' as char(4))
If string literals were treated as being of type char like they are in other
databases, we would see the expected behavior, but strings/string literals came
first and we might be stuck with that behavior, as changing that would mean a
lot of changes in Hive behavior.
> Trailing spaces in char comparisons
> -----------------------------------
>
> Key: HIVE-11392
> URL: https://issues.apache.org/jira/browse/HIVE-11392
> Project: Hive
> Issue Type: Bug
> Components: Hive
> Affects Versions: 2.0.0
> Reporter: Aihua Xu
>
> Following on HIVE-3745, for char type, hive should ignore trailing spaces for
> comparison while it seems not the case.
> {noformat}
> create table chtest (a char(4));
> insert into chtest values ('1');
> select * from chtest where a='1'; # no whitespace, produces result
> select * from chtest where a='1 '; # 2 spaces, no result
> select * from chtest where a='1 '; # 3 spaces, no result
> select * from chtest where a=cast('1 ' as char(4)); # any amount of spaces,
> cast to char of same length, produces result
> {noformat}
> It's not consistent.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)