基于Oracle的SQL查询

基于Oracle的SQL查询,sql,database,oracle,Sql,Database,Oracle,我换这张桌子有点麻烦: 我的表格是style(id,style) 我需要将单词“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等等) 但是我真的不知道如何区分这些词:S你的问题让我有点困惑,因为这些词与

我换这张桌子有点麻烦:

我的表格是
style
id,style

我需要将单词“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等等)


但是我真的不知道如何区分这些词:S

你的问题让我有点困惑,因为这些词与你的例子不太相符。无论如何,使用一个简单的
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
我认为最好是显式地做事情,而不是试图解析一个值并进行算术运算。如果您需要重新访问代码,这样做会更容易理解

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');

SQLFIDLE:

如果需要更改数据:

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;
如果您只需要在读取数据时进行转换:

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;