2016-10-18 52 views
0

我有這樣如何更改數據類型使用Case語句

SELECT CASE 
       WHEN gift_club_end_date = ' ' THEN ' ' 
       WHEN gift_club_end_date = '00000000' THEN ' ' 
       ELSE TO_DATE(gc.gift_club_end_date, 'yyyymmdd') 

       END 

     FROM gift_clubs gc 

的錯誤是

ORA-00932代碼;不一致的數據類型:期望的CHAR得到日期

gift_club_end_date的數據類型是VARCHAR2。

我想改變爲DATE

例如,如果有行

話,就說明

2016年8月2日

但也有一些行是空的00000000

so wan噸至顯示/變更爲空白這些行,如果空白或00000000

我怎麼可以編寫這樣的,而不會導致錯誤

謝謝你這麼多

+1

你使用單個空格('''')來表示空嗎? AND:你想要查詢返回什麼 - 一個字符串或日期? – mathguy

回答

1

您可能需要執行以下操作:

with gift_clubs(gift_club_end_date) as 
(
    select '20160802' from dual union all 
    select '00000000' from dual union all 
    select null  from dual 
) 
select case 
     when gift_club_end_date = '00000000' 
      then to_date(null) 
     when gift_club_end_date is null 
      then to_date(null) 
     when gift_club_end_date = ' ' 
      then to_date(null) 
     else 
      to_date(gift_club_end_date, 'yyyymmdd') 
     end 
from gift_clubs 

這考慮了null和包含單個空格的字符串的情況;你可能只需要其中的一個,所以相應地編輯語句。