【问题标题】:update the first character in the column, in queries oracle在查询 oracle 中更新列中的第一个字符
【发布时间】:2020-11-17 15:18:47
【问题描述】:

我有一个“发票”表。该表为 19 万行。但有一个问题。在“Docnumber”列中,这种格式的所有记录“Y-1000”,“Y-1001”,我想在从 Y 到 P 的所有记录中绑定。有这种格式的所有记录“P-1000”,“ P-1001”。但是我不明白如何正确地做,我将不胜感激!

【问题讨论】:

标签: sql string oracle oracle11g sql-update


【解决方案1】:

这是将列中的Y 简单替换为P。因此,使用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

【讨论】:

    【解决方案2】:

    请使用以下查询:

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

    【讨论】:

      【解决方案3】:

      您可以使用字符串函数。下面将列中每个值的第一个字符替换为'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%'
      

      【讨论】:

      • 搜索者想要将Y-1001 更改为P-1001,而不是反过来 :)
      猜你喜欢
      • 2018-11-11
      • 2018-05-29
      • 1970-01-01
      • 2015-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-29
      相关资源
      最近更新 更多