case when缺失關鍵字和字符集不匹配

</pre><pre name="code" class="sql">

字符集不匹配問題:


<span style="font-family: SimSun; font-size: 14px; background-color: rgb(255, 255, 255);"></span><pre name="code" class="sql">select case 洗井原因
	  when '分注井測試前洗井'
            then '1'    
          when '長關井開井前洗井'  
            then '2' 
          when '吸水能力下降洗井'  
            then '4' 
        else '99' end 洗井原因 from wash_v_pro2 t

代碼報錯

研究發現t.洗井原因nvarchar2類型的,when的條件''中的漢字是varchar2類型的,所以要把''中的漢字都轉化爲nvarchar2類型

根據該文得知

oracle中nvarchar2字符集不匹配

應該用to_char函數來進行varchar2 nvarchar2的類型轉換

case的用法中whenelse後的字符類型必須一致,但是這樣還是不行,再把case後的字符類型改成與whenelse後的字符類型一致纔算ok

select  case to_char(洗井原因)
          when to_char('分注井測試前洗井')
            then '1'    
          when to_char('長關井開井前洗井')
            then '2' 
          when to_char('吸水能力下降洗井')
            then '4' 
        else '99' end 洗井原因 from wash_v_pro2 t
這樣就能取到了

然而後來我又注意到

case  when 洗井原因 = '分注井測試前洗井'
            then '1'    
          when 洗井原因 = '長關井開井前洗井'  
            then '2' 
          when 洗井原因 = '吸水能力下降洗井'  
            then '4' 
        else '99' end 洗井原因

這樣不用改類型也能取,不得其解,只能暫時知道待判斷列在case後時需要字符集匹配,集體使用to_char,而在when後單獨判斷時不需要字符集匹配。


缺失關鍵字:

select case 洗井狀態
     when substr(洗井狀態,0,5) = '洗井未完成' then '2'
     when '洗井正常完成' then '1'
     else '' end 洗井狀態
from wash_v_pro2 t
語句
when substr(洗井狀態,0,5) = '洗井未完成' then '2'
報錯:

後來發現是因爲case後已經接了待判斷列,when後面不能再接判斷語句,

比如:

when substr(洗井狀態,0,5) = '洗井未完成'

改爲

when 1=1

同樣報錯。

改爲

when '字符串'

就不報錯了,證明when後面不能再加判斷語句了。

於是最終代碼改爲

</pre><p></p><pre name="code" class="sql"><pre name="code" class="sql">select case 
<span style="white-space:pre">	</span>when substr(洗井狀態,0,5) = '洗井未完成'
<span style="white-space:pre">	</span> then '2'
<span style="white-space:pre">	</span>when 洗井狀態 = '洗井正常完成'
<span style="white-space:pre">	</span> then '1'
<span style="white-space:pre">	</span>else ''
<span style="white-space:pre">	</span>end 洗井狀態
from wash_v_pro2 t


case後面不再接待判斷列,所有判斷都寫在when後面,不再報錯了


總結:case when else end最好把判斷條件寫在when後面,不報錯,就是累點,複製粘貼比較多

case後面接帶判斷列,when後面接字符可以方便的直接進行匹配判斷,但是1.可能遇到字符不匹配2.不能在when後面再加條件進行判斷

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