sql—在oracle查询中更新列中的第一个字符

23c0lvtd  于 2021-07-29  发布在  Java
关注(0)|答案(3)|浏览(405)

我有一张“发票”表。这张table有19万排。但有一个问题。在“docnumber”列中,此格式的所有记录都是“y-1000”、“y-1001”,我要将y到p之间的所有记录绑定在一起。所有记录的格式都是“p-1000”,“p-1001”。但我不明白怎么做才对,我会很感激你的帮助!

fcg9iug3

fcg9iug31#

可以使用字符串函数。以下内容将列中每个值的第一个字符替换为 'P' :

update mytable t set docnumber = 'P' || substr(docnumber, 2)

根据您的实际需求,您可以更具体一点,例如通过确保 docnumber 开始于 'Y' :

update mytable t set docnumber = 'P' || substr(docnumber, 2) 
where docnumber like 'Y%'
jjjwad0x

jjjwad0x2#

这是一个简单的 YP 在列中。简单的更新一下 REPLACE 函数将解决问题。

UPDATE invoices
SET docnumber = REPLACE (docnumber, 'Y', 'P');

当然,这假设字符串的其余部分不能包含 P . 如果可以,那么基于正则表达式的替换将使用 REGEXP_REPLACE 只替换开头的函数 Y .

UPDATE invoices
SET docnumber = REGEXP_REPLACE (docnumber, '^Y', 'P');

下面的查询显示 REGEXP_REPLACE 只替换开头 Y ```
WITH
inv
AS
(SELECT 'Y-8817Y' AS docnumber FROM DUAL
UNION
SELECT 'Y-8884' AS docnumber FROM DUAL)
SELECT docnumber,
REGEXP_REPLACE (docnumber, '^Y', 'P') AS replaced_y
FROM inv;

结果如下:

DOCNUMBER REPLACED_Y
Y-8817Y P-8817Y
Y-8884 P-8884

hs1rzwqc

hs1rzwqc3#

请使用以下查询:

update Invoice_test set docnumber = 'P'||SUBSTR(DOCNUMBER, 2) where SUBSTR(DOCNUMBER, 1,1) = 'Y';

相关问题