替换字符串的最后一个字符 Oracle plsql

Replace last character of string Oracle plsql

如果最后一个字符是点,如何用空白替换字符串的最后一个字符。

示例:

Select replace('Luis Nazario Ronaldo Da Lima.',' ','.') as Name from dual
union all
Select replace('Ronaldo de Assis Moreira',' ','.') as Name from dual

名字需要去掉字符串末尾的点,名字可以。

我需要这个结果:

LuisNazarioRonaldoDaLima
RonaldodeAssisMoreira

您必须先放置要替换的字符。像这样:

Select replace('Luis Nazario Ronaldo Da Lima.','.') as Name from dual
union all
Select replace('Ronaldo de Assis Moreira','.') as Name from dual

但是如果你想删除所有行中带有列名变量的所有点,你应该这样做:

select decode(substr(your_colunm, 0, LENGTH(your_colunm) - 1),
              '.',
              substr(your_colunm, 0, LENGTH(your_colunm) - 1),
              your_colunm) from your_table

您可以使用 REGEXP_REPLACE:

SELECT REGEXP_REPLACE('Luis Nazario Ronaldo Da Lima.', ' |\.$', '') AS Name FROM dual
UNION ALL
SELECT REGEXP_REPLACE('Ronaldo de Assis Moreira', ' |\.$', '') FROM dual;

Demo

这输出:

LuisNazarioRonaldoDaLima
RonaldodeAssisMoreira

此处使用的正则表达式模式是 \.$,如果最后一个字符是点,则将以空格或字符串的最后一个字符为目标。

为此您不需要正则表达式。正则表达式是一个大机器,导致执行缓慢(呃)。当您无法使用标准字符串函数解决问题时,它们非常有用,但这里不是这种情况。

要删除字符串末尾的一个、两个或更多尾随句点,只需使用 RTRIM(..., '.') 就像这样:

select original_name, rtrim(original_name, '.') as cleaned_up_name
from   (
         select 'Luis Nazario Da Lima.' as original_name from dual union all
         select 'Ronaldo de Assis Moreira'               from dual union all
         select 'Pele...'                                from dual
       )
;

ORIGINAL_NAME                 CLEANED_UP_NAME              
---------------------------   -----------------------------
Luis Nazario Da Lima.         Luis Nazario Da Lima 
Ronaldo de Assis Moreira      Ronaldo de Assis Moreira     
Pele...                       Pele