2012-12-08 221 views
2

我有一個小麻煩交替此表:SQL查詢基於Oracle的

我的表是stylesid, style

id Style  
------------ 
01 Style-01 
02 Style-02 
03 Style-03 
04 Table 
06 Chair 

我需要改變單詞 「風格-XX」 教練-XX,其中XX是偶數(0,2,4,6)。

所以它看起來像這樣:

id Style  
------------ 
01 Coach-02 
02 Style-03 
03 Coach-04 
04 Table 
06 Chair 

嗯,我知道,它必須是這樣的:XX模2 = 0,爲了一個數字是偶數(0,2,4等)。

但我真的不知道如何分離的話:S

回答

0

你的問題有點迷惑我,因爲詞不完全匹配您的例子。無論如何,如何使用簡單的UPDATE一步,這樣的事情:

update your_table 
from (
    select id 
     , case 
      when Style = 'Style-01' then 'Coach-02' 
      when Style = 'Style-03' then 'Coach-04' 
      when Style = 'Style-05' then 'Coach-06' 
      when Style = 'Style-07' then 'Coach-08' 
      when Style = 'Style-09' then 'Coach-00' 
      end as new_style 
    from your_table 
    where Style in ('Style-01','Style-03','Style-05' 
        'Style-07','Style-09' 
    ) x 

set Style = x.new_style 

where your_table.id = x.id 

我認爲這是最好做的事情明確,而不是試圖解析值和做算術。如果您需要重新訪問代碼,那麼這樣的事情更容易遵循。

0
MERGE INTO style s 
USING (
    SELECT id 
    FROM style ss 
    WHERE ss.style LIKE 'Style%' 
    AND mod(to_number(substr(ss.style,6)),2)=0)e 
    ON (s.id = e.id 
    ) 
WHEN MATCHED THEN 
    UPDATE SET style =replace(style,'Style','Coach'); 

SQLFIDDLE:link

0

如果您需要的是改變數據:

update STYLES set STYLE = 'Coach-'||substr(STYLE,-2,2) 
where STYLE like 'Style-__' 
    and substr(STYLE,-2,2) between '00' and '99' 
    and mod(to_number(substr(STYLE,-2,2)),2) = 0; 

如果你只需要改變,而讀取數據:

select 
    ID 
,case 
    when STYLE like 'Style-__' 
    and substr(STYLE,-2,2) between '00' and '99' 
    and mod(to_number(substr(STYLE,-2,2)),2) = 0 
    then 'Coach-'||substr(STYLE,-2,2) 
    else STYLE 
    end as STYLE 
from STYLES;