2

このテーブルを交互にするのに少し問題があります:

私のテーブルはstyles( id, style)

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

「Style-XX」という単語を Coach-XX に変更する必要があります。ここで、XX は偶数 (0、2、4、6) です。

したがって、次のようになります。

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

数字が偶数 (0、2、4 など) になるためには、XX mod 2 = 0 である必要があります。

しかし、単語の区切り方が本当にわかりません:S

4

3 に答える 3

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;
于 2012-12-08T18:40:17.877 に答える
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

値を解析して算術を行うよりも、明示的に物事を行う方が良いと思います。コードを再確認する必要がある場合に備えて、このような方法を使用すると、はるかに簡単に実行できます。

于 2012-12-08T16:24:46.947 に答える
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 :リンク

于 2012-12-08T18:24:55.687 に答える