【问题标题】:Removing all characters before a given special character [Oracle SQL]删除给定特殊字符之前的所有字符 [Oracle SQL]
【发布时间】:2021-05-26 14:55:26
【问题描述】:

我的 oracle 表有一列包含这些数据:

ROW_ID FILE_NAME
1 ZASWEFFT%Contract V1.pdf
2 ZZZZxxxx12%Contract 03.12.14.pdf

我需要删除之前的所有内容,包括 % 字符,这会给我:

ROW_ID FILE_NAME
1 Contract V1.pdf
2 Contract 03.12.14.pdf

我发现了类似的question 我对其进行了更改以适合我的需要,并且 select 语句有效:

SELECT SUBSTR(value, INSTR(value, '%')+1) invalue
  FROM (SELECT FILE_NAME value FROM SFDC.PROJECT_ATT));

结果:

INVALUE
Contract V1.pdf
Contract 03.12.14.pdf

但我无法将其转换为 update 语句。我最后一次尝试是:

UPDATE SIEBEL.S_PROJ_ATT T1
   SET T1.FILE_NAME =
       (SELECT SUBSTR(value,
                      INSTR(value,
                            '%') + 1) invalue
          FROM (SELECT T2.FILE_NAME value
                  FROM SIEBEL.S_PROJ_ATT T2
                 WHERE T1.ROW_ID = T2.ROW_ID))

Oracle 说语法很垃圾:ORA-00904: "T1"."ID": invalid identifier

【问题讨论】:

    标签: sql oracle


    【解决方案1】:

    你太复杂了

    CREATE TABLE S_PROJ_ATT  (
      ROW_ID INTEGER,
      FILE_NAME VARCHAR(32)
    );
    
    INSERT INTO S_PROJ_ATT 
      (ROW_ID, FILE_NAME)
    VALUES
      ('1', 'ZASWEFFT%Contract V1.pdf');
    
    INSERT INTO S_PROJ_ATT 
      (ROW_ID, FILE_NAME)
    VALUES  
      ('2', 'ZZZZxxxx12%Contract 03.12.14.pdf');
    
    UPDATE S_PROJ_ATT  
    SET FILE_NAME = SUBSTR(FILE_NAME, INSTR(FILE_NAME, '%')+1)
    

    2 行受影响

    SELECT * FROM S_PROJ_ATT
    
    ROW_ID |文件名 -----: | :-------------------- 1 |合同V1.pdf 2 |合同 03.12.14.pdf

    db小提琴here

    【讨论】:

    • 谢谢,确实简单多了!
    【解决方案2】:

    您不需要子查询;你可以这样做:

    update s_proj_att
    set file_name = substr(file_name, instr(file_name, '%') + 1)
    where instr(file_name, '%') > 0;
    

    where 子句阻止它尝试更新任何开头没有*% 的文件名。

    db<>fiddle demo

    您链接到的问题是使用子查询 - 或行视图 - 从字符串文字生成值。您无需在此处执行此操作,因为您已经拥有列值。

    【讨论】:

      猜你喜欢
      • 2022-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-16
      • 2015-09-05
      相关资源
      最近更新 更多