【发布时间】:2021-02-01 14:01:13
【问题描述】:
我在表 ident_nums 中有一个列,其中包含不同类型的 id。我需要从该列中删除特殊字符(例如 [.,/#&$-])并用空格替换它们;但是,如果在字符串的开头发现特殊字符,我需要将其删除而不放置空格。我尝试分步进行;首先,我删除了特殊字符并用空格替换它们(我用 REGEXP_REPLACE) 然后找到在字符串开头包含空格的记录,并尝试使用 TRIM 函数删除空格,但由于某种原因不起作用。
这是我所做的
Select regexp_replace(id_num, '[:(),./#*&-]', ' ') from ident_nums
这部分对我有用,我从列中删除了所有不需要的字符,但是,如果列中的字符串以我不想在其中有空格的字符开头,我只想删除该字符,所以我尝试使用内置函数TRIM。
update ident_nums
set id_num = TRIM(id_num)
我收到错误 ORA-01407: can't update ident_nums.id_num to NULL
有什么想法我在这里做错了吗?
如果我添加一个 where 子句,它确实有效,
update ident_nums
set id_num = TRIM(id_num) where id = 123;
但我需要用字符串开头的空格更新所有行。
欢迎提出任何建议。 或者如果它可以做得更好。 该表有数百万条记录。
谢谢
【问题讨论】:
-
不工作是什么意思?
-
@dnoeth 修剪功能不会删除空白。
-
“特殊字符”是什么意思?
-
显示你当前的 trim/regexp_replace。
-
如果列 ID_NUM 仅包含空格(在用空格替换特殊字符之后),则 TRIM 将使其为空,因为 Oracle 认为空字符串为空。也许这是你的问题?