關於char(n)類型引起的字符串判斷問題

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)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章