PLSQL - 如何复制一行更改列的第一个字符?
PLSQL - How to replicate a row changing columns first characters?
我有一个 table 产品是这样的:
PRODUCT_ID SUB_PRODUCT_ID DESCRIPTION CLASS
---------- -------------- ----------- -----
A001 ACC1 coffeemaker A
A002 ACC1 toaster A
A003 ACC2 coffee table A
A004 ACC5 couch A
我需要复制一行,只更改某些列中的第一个字符,以便在相同的 table 中获得这样的结果,例如,如果我选择第一行,我想复制 PRODUCT_ID
仅更改第一个字母(从 A001 到 B001),SUB_PRODUCT_ID
仅更改第一个字母(从 ACC1 到 BCC1),保留 DESCRIPTION
并更改 CLASS
(从 A 到 B)
PRODUCT_ID SUB_PRODUCT_ID DESCRIPTION CLASS
---------- -------------- ----------- -----
A001 ACC1 coffeemaker A
B001 BCC1 coffeemaker B
我一直在尝试使用 SUBSTR 函数,但没有得到积极的结果。
假设您的 table 被称为 "products" 并且您想更改所有行(或根据需要添加约束):
insert into products
select 'B'||substr(product_id,2), 'B'||substr(sub_product_id,2), description, 'B'
from product
这是你想要的吗?
insert into products(PRODUCT_ID, SUB_PRODUCT_ID, DESCRIPTION, CLASS)
select replace(product_id, 'A', 'B'),
replace(SUB_PRODUCT_ID, 'A', 'B'),
DESCRIPTION,
replace(CLASS, 'A', 'B')
from products
where class = 'A';
编辑:
replace()
可能有点矫枉过正:
insert into products(PRODUCT_ID, SUB_PRODUCT_ID, DESCRIPTION, CLASS)
select 'B' || substr(product_id, 2),
'B' || substr(SUB_PRODUCT_ID, 2),
DESCRIPTION,
'B'
from products
where class = 'A';
Hi You can do a lilte bit of code twisting and here's the output :)
SELECT 'A001' PID,'ACC1'SPID,'cofeemaker' dsc,'A' clss FROM dual
UNION
SELECT REPLACE(a.pid,SUBSTR(a.pid,1,1),'B') PID,
REPLACE(a.SPID,SUBSTR(a.spid,1,1),'B')SPID,
a.dsc,
REPLACE(a.clss,SUBSTR(a.CLSS,1,1),'B') CLSS
FROM
(SELECT 'A001' PID,'ACC1'SPID,'cofeemaker' dsc,'A' clss FROM dual
)a;
我有一个 table 产品是这样的:
PRODUCT_ID SUB_PRODUCT_ID DESCRIPTION CLASS
---------- -------------- ----------- -----
A001 ACC1 coffeemaker A
A002 ACC1 toaster A
A003 ACC2 coffee table A
A004 ACC5 couch A
我需要复制一行,只更改某些列中的第一个字符,以便在相同的 table 中获得这样的结果,例如,如果我选择第一行,我想复制 PRODUCT_ID
仅更改第一个字母(从 A001 到 B001),SUB_PRODUCT_ID
仅更改第一个字母(从 ACC1 到 BCC1),保留 DESCRIPTION
并更改 CLASS
(从 A 到 B)
PRODUCT_ID SUB_PRODUCT_ID DESCRIPTION CLASS
---------- -------------- ----------- -----
A001 ACC1 coffeemaker A
B001 BCC1 coffeemaker B
我一直在尝试使用 SUBSTR 函数,但没有得到积极的结果。
假设您的 table 被称为 "products" 并且您想更改所有行(或根据需要添加约束):
insert into products
select 'B'||substr(product_id,2), 'B'||substr(sub_product_id,2), description, 'B'
from product
这是你想要的吗?
insert into products(PRODUCT_ID, SUB_PRODUCT_ID, DESCRIPTION, CLASS)
select replace(product_id, 'A', 'B'),
replace(SUB_PRODUCT_ID, 'A', 'B'),
DESCRIPTION,
replace(CLASS, 'A', 'B')
from products
where class = 'A';
编辑:
replace()
可能有点矫枉过正:
insert into products(PRODUCT_ID, SUB_PRODUCT_ID, DESCRIPTION, CLASS)
select 'B' || substr(product_id, 2),
'B' || substr(SUB_PRODUCT_ID, 2),
DESCRIPTION,
'B'
from products
where class = 'A';
Hi You can do a lilte bit of code twisting and here's the output :)
SELECT 'A001' PID,'ACC1'SPID,'cofeemaker' dsc,'A' clss FROM dual
UNION
SELECT REPLACE(a.pid,SUBSTR(a.pid,1,1),'B') PID,
REPLACE(a.SPID,SUBSTR(a.spid,1,1),'B')SPID,
a.dsc,
REPLACE(a.clss,SUBSTR(a.CLSS,1,1),'B') CLSS
FROM
(SELECT 'A001' PID,'ACC1'SPID,'cofeemaker' dsc,'A' clss FROM dual
)a;