@pnowojski  Thanks for looking into it.
 I think there are bugs in all your 4 sqls, so we can't get the conclusions 
from them.
- In mysql, trailing spaces are removed when CHAR values are retrieved from a 
table. 
- You use literal of length 3('aa ') to compare to CHAR(4) and VARCHAR(4).
- Except for mysql, other database will not remove trailing spaces so that the 
result of `case when` contains blanks.

What result type of `case when`? Should we change case when result type to 
varchar? I think we can get the answer form the following sqls.
1. Mysql
There are no doubt, since mysql Reference Manual says the return type is 
VARCHAR.

2. Oracle
[http://sqlfiddle.com/#!4/cd577/2/0](http://sqlfiddle.com/#!4/cd577/2/0)

3. PostgreSql
[http://sqlfiddle.com/#!17/c20bd/3/0](http://sqlfiddle.com/#!17/c20bd/3/0)

4. SqlServer
[http://sqlfiddle.com/#!18/c20bd/10/0](http://sqlfiddle.com/#!18/c20bd/10/0)

>From the results, we can see that
- There are no trailing spaces 
- The result type length should not be 1, i.e., can not be char(1) or 
varchar(1). It should be char(3) or varchar(3)
- Result of `concat(CAST('a' AS char(3)), '|')` contains blanks while 
`concat(CAST('a' AS varchar(3)), '|')`  not, so the result type of `case when` 
should be varchar.

I think it is meaningful to turn the result type of `case when` to VARCHAR. 
What do you think?

Thanks, Hequn


[ Full content available at: https://github.com/apache/flink/pull/6519 ]
This message was relayed via gitbox.apache.org for [email protected]

Reply via email to