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)