1

我有一张桌子,上面有这样的产品:

PRODUCT_ID    SUB_PRODUCT_ID    DESCRIPTION   CLASS
----------    --------------    -----------   -----
A001        ACC1                coffeemaker   A
A002        ACC1                toaster       A
A003        ACC2                coffee table  A
A004        ACC5                couch         A

我需要复制仅更改某些列中的第一个字符的行以在同一个表中获得这样的结果,例如,如果我取第一行,我想复制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 函数,但没有得到积极的结果。

4

3 回答 3

0
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;
于 2015-08-13T06:58:19.703 回答
0

假设您的表称为“产品”并且您想要更改所有行(或根据需要添加约束):

insert into products
select 'B'||substr(product_id,2), 'B'||substr(sub_product_id,2), description, 'B'
from product
于 2015-08-13T00:08:51.483 回答
0

这是你想要的吗?

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';
于 2015-08-13T00:08:59.420 回答