oracle的表A中定义了一个字段 flag,类型为 char(2), 用于保存一个标志,取值‘Y’‘N’。
在数据库中增加新纪录该字段取‘Y’‘N’;
执行sql语句 select decode(flag,'Y','是','N','否','否') as flag1 , flag from A;
结果会是什么呢? flag1为'是'的时候flag一定为Y?
不是的,结果中flag1字段全部为默认值'否'。
原来char(2)类型要求必须是两字符,即使你输入‘Y’,oracle会自动给你加个空格转化为'Y ';
但是怪就怪在 select flag from A where flag='Y' ;也能返回响应的结果;
也就说在条件语句中 'Y'='Y '成立 而decode函数却认为二者不相等;
所以在做标志位的列,要么用char(1) 要么用varchar(2)