Заменить последний символ строки Oracle plsql - PullRequest
0 голосов
/ 20 апреля 2020

Как заменить последний символ строки пустым, если последний символ является точкой.

Пример:

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

Ответы [ 3 ]

1 голос
/ 20 апреля 2020

Вы можете использовать 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;

Демо

Это выводит:

LuisNazarioRonaldoDaLima
RonaldodeAssisMoreira

Здесь используется шаблон регулярного выражения \.$, и он будет нацелен на пробелы или последний символ строки, если этот последний символ будет точкой.

1 голос
/ 20 апреля 2020

Для этого вам не нужны регулярные выражения. Регулярные выражения - это большой механизм, приводящий к медленному выполнению. Они хороши, когда вы не можете решить проблему стандартными строковыми функциями, но здесь это не так.

Чтобы удалить один, два или более завершающих периодов в конце строки, просто используйте 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       
0 голосов
/ 20 апреля 2020

Вы должны сначала поместить символ, который будет заменен. например:

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
...