[英]Removing all characters before a given special character [Oracle SQL]
my oracle table has a column with these data:我的 oracle 表有一列包含这些数据:
ROW_ID ![]() |
FILE_NAME![]() |
---|---|
1 ![]() |
ZASWEFFT%Contract V1.pdf ![]() |
2 ![]() |
ZZZZxxxx12%Contract 03.12.14.pdf ![]() |
I need to remove everything before and including the % character, which would give me:我需要删除之前的所有内容,包括 % 字符,这会给我:
ROW_ID ![]() |
FILE_NAME![]() |
---|---|
1 ![]() |
Contract V1.pdf![]() |
2 ![]() |
Contract 03.12.14.pdf![]() |
I found this similar question I changed it to fit my need and the select statement works:我发现了这个类似的问题,我将其更改为适合我的需要,并且 select 语句有效:
SELECT SUBSTR(value, INSTR(value, '%')+1) invalue
FROM (SELECT FILE_NAME value FROM SFDC.PROJECT_ATT));
result:结果:
INVALUE![]() |
---|
Contract V1.pdf![]() |
Contract 03.12.14.pdf![]() |
But I'm not able to transform this into an update statement.但我无法将其转换为更新语句。 My last try was:
我最后一次尝试是:
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 says the syntax is rubbish: ORA-00904: "T1"."ID": invalid identifier Oracle 说语法是垃圾: ORA-00904: "T1"."ID": invalid identifier
You don't need the subqueries;您不需要子查询; you can just do:
你可以这样做:
update s_proj_att
set file_name = substr(file_name, instr(file_name, '%') + 1)
where instr(file_name, '%') > 0;
The where
clause stops it trying to update any file names without the *%
at the start. where
子句阻止它尝试更新任何开头没有*%
的文件名。
The question you linked to is using a subquery - or line view - to generate the value from a string literal.您链接到的问题是使用子查询 - 或行视图 - 从字符串文字生成值。 You don't need to do that here, as you already have the column value.
您不需要在此处执行此操作,因为您已经拥有列值。
you made it too complicted你太复杂了
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 rows affected 2 行受影响
SELECT * FROM S_PROJ_ATT
ROW_ID |ROW_ID | FILE_NAME -----: |:-------------------- 1 |
文件名 -----: |:-------- 1 | Contract V1.pdf 2 |
合同 V1.pdf 2 | Contract 03.12.14.pdf
合同 03.12.14.pdf
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.