Oracle regexp_replace - 删除尾随空格

Oracle regexp_replace - removing trailing spaces

我正在寻求有关从我的队列名称中删除尾随 space 的帮助。以下是我正在使用的 table 的示例:

QUEUE_NAME
Queue A 
Queue B
Queue C 

我遇到的问题是队列名称末尾有一个额外的 space 并且在尝试以下代码时:

SELECT
 TRIM(TRAILING ' ' FROM QUEUE_NAME)
FROM
 TABLE_QUEUE;

space 仍然存在。

我正在阅读来自 Google 的搜索并遇到以下删除特殊字符 [https://community.oracle.com/blogs/bbrumm/2016/12/11/how-to-replace-special-characters-in-oracle-sql] 的代码,这删除了所有 space,包括末尾的那个。我写的代码:

SELECT
     REGEXP_REPLACE(QUEUE_NAME, '[^0-9A-Za-z]', '')
    FROM
     TABLE_QUEUE;

我现在唯一的问题是我的结果如下所示:

QUEUE_NAME
QueueA
QueueB
QueueC

我从来没有真正使用过 regexp_replace 因此不确定我需要更改代码以在队列名称之间留下 spaces ,所以如果有人能提供建议,我将不胜感激关于如何解决这个问题。

提前致谢。

---- 编辑后的代码不应包含 [.!?]+

您可以尝试仅使用 trim,如下面的 select 语句:

with t(col0) as
(
 select ' Queue A  ' from dual union all
 select '   Queue B ' from dual union all
 select ' Queue C  ' from dual 
)
select trim(col0)
  from t;

trimmedText
-----------
Queue A
Queue B
Queue C

你周围没有周围的空间。

您想从字符串末尾删除 space:

regexp_replace(queue_name, '[[:space:]]+$', '')

(模式中的“$”表示结束。)

如果这仍然不起作用,那么您正在处理一些不被视为 space 的奇怪的不可见字符。使用

regexp_replace(queue_name, '[^0-9A-Za-z]+$', '')

相反,如您所知,它会删除除字母和数字之外的所有字符。 '$' 将其限制在字符串的末尾。

类型为 CHAR 的列(例如 CHAR(8))总是在右侧用空白填充到字段的全宽。因此,如果您将 'Queue A' 存储在 CHAR(8) 字段中,数据库会在其末尾添加一个 space - 并且无法从列中删除额外的 space .解决方案是更改字段,将其定义为 VARCHAR2(在 Oracle 中首选)或 VARCHAR:

ALTER TABLE TABLE_QUEUE MODIFY QUEUE_NAME VARCHAR2(8);

那么数据库将只存储你给它的字符,而不用空格填充字段。

祝你好运。