Для каждой подстроки без пробелов в каждом предложении, а затем объединить предыдущую часть предложения с первой подстрокой длиной до 3 символов, а затем заменить оставшуюся часть слова на *
(вы можетеиспользуйте LPAD( '*', length, '*' )
для этого`, а затем восстановите предложение и выполните это итеративно, что можно сделать в условии факторизации рекурсивного подзапроса:
Тестовые данные :
CREATE TABLE test_data ( value ) AS
SELECT 'Company Microsoft Technology' FROM DUAL UNION ALL
SELECT ' a bb ccc dddd eeeee' FROM DUAL UNION ALL
SELECT 'Smith-Smythe O''Brien' FROM DUAL
Запрос :
WITH bounds ( value, start_pos, end_pos ) AS (
SELECT value,
1,
1
FROM test_data
UNION ALL
SELECT SUBSTR( value, 1, start_pos - 1 )
|| SUBSTR( value, start_pos, LEAST( end_pos - start_pos, 3 ) )
|| LPAD( '*', GREATEST( 0, end_pos - start_pos - 3 ), '*' )
|| SUBSTR( value, end_pos ),
REGEXP_INSTR( value, '\S+', end_pos, 1, 0 ),
REGEXP_INSTR( value, '\S+', end_pos, 1, 1 )
FROM bounds
WHERE end_pos > 0
)
SELECT value
FROM bounds
WHERE end_pos = 0;
Вывод :
| VALUE |
| :--------------------------- |
| Smi********* O'B**** |
| Com**** Mic****** Tec******* |
| a bb ccc ddd* eee** |
дБ<> скрипка здесь