用oracle中的符号替换单词,但保留第一个和最后一个字符。
我尝试了REGEXP_REPLACE('ANNE MARRY', '(\w)\w', '\1*')
我希望当我介绍“Anne Marry”时,我的查询返回“A••e M•••y”
这就是REGEXP_REPLACE
解决方案吗?
最佳答案
Oracle 不支持使用单个正则表达式解决此问题所需的语法。
您可以使用简单的字符串函数和递归子查询,无需正则表达式即可完成此操作:
WITH replacements (id, value, epos) AS (
SELECT ROWNUM, value, 1 FROM table_name
UNION ALL
SELECT id,
CASE
WHEN INSTR(value, ' ', epos) = 0 AND epos <= LENGTH(value) - 2
THEN SUBSTR(value, 1, epos)
|| LPAD('•', LENGTH(value) - epos - 1, '•')
|| SUBSTR(value, -1)
WHEN INSTR(value, ' ', epos) <= epos + 2
THEN value
ELSE SUBSTR(value, 1, epos)
|| LPAD('•', INSTR(value, ' ', epos) - epos - 2, '•')
|| SUBSTR(value, INSTR(value, ' ', epos) - 1)
END,
INSTR(value, ' ', epos) + 1
FROM replacements
)
SEARCH DEPTH FIRST BY id SET order_id
CYCLE id, epos SET is_cycle TO 1 DEFAULT 0
SELECT value
FROM replacements
WHERE is_cycle = 1;
对于示例数据:
CREATE TABLE table_name (value) AS
SELECT 'ANNE MARRY' FROM DUAL UNION ALL
SELECT 'XI NG' FROM DUAL UNION ALL
SELECT 'A B C D E' FROM DUAL UNION ALL
SELECT 'MAY' FROM DUAL;
输出:
关于sql - 如何用 • 替换单词但仅显示第一个和最后一个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76320262/