基于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;