Regex 替换前导空格和尾随空格

Regex 替换前导空格和尾随空格,regex,oracle,Regex,Oracle,我在Oracle的数据库表中有一列,其值带有前导空格和尾随空格。我希望前导空格替换为'P',尾随空格替换为'T',仅使用内联查询如果要将每个前导/训练空格替换为相同数量的P/Ts,则可以使用: SELECT REPLACE( REGEXP_SUBSTR( your_column, '^ +' ), ' ', 'P' ) || TRIM( BOTH FROM your_column ) || REPLACE( REGEXP_SUBSTR( your_column, '

我在Oracle的数据库表中有一列,其值带有前导空格和尾随空格。我希望前导空格替换为'P',尾随空格替换为'T',仅使用内联查询

如果要将每个前导/训练空格替换为相同数量的

P
/
T
s,则可以使用:

SELECT REPLACE( REGEXP_SUBSTR( your_column, '^ +' ), ' ', 'P' )
       || TRIM( BOTH FROM your_column )
       || REPLACE( REGEXP_SUBSTR( your_column, ' +$' ), ' ', 'T' )
FROM   your_table
如果要将空格替换为单个
p
/
T
,则:

SELECT REGEXP_REPLACE(
         REGEXP_REPLACE( your_column, '(.*?) +$', '\1T' ),
         '^ +(.*)',
         'P\1'
       )
FROM   your_table

由于您没有指定前导空格和尾随空格的长度是否都为常量,因此只有在以下情况下才能使用类似的内容:

select  replace(substr('  hello world  ',1, instr('  hello world  ',' ',1,2) ),' ','P')||
        trim('  hello world  ')||
        replace(substr('  hello world  ', instr('  hello world  ',' ',-1,2), length('  hello world  ') ),' ','T')
from dual;

请注意,查询中所有instr函数中的数字“2”表示前导/尾随空格的常量,因此您应该根据需要对其进行更改。

请发布一些示例数据和所需结果。还有,到目前为止你试过什么?