Oracle regexp_replace-删除尾随空格

时间:2018-10-31 20:30:58

标签: sql oracle regexp-replace

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

QUEUE_NAME
Queue A 
Queue B
Queue C 

我的问题是队列名称的末尾以及尝试以下代码时有多余的空间:

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

空间仍然存在。

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

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

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

QUEUE_NAME
QueueA
QueueB
QueueC

我从未真正使用过regexp_replace,因此不确定是否需要更改代码以在队列名称之间保留空格,因此如果有人可以建议我如何解决此问题,将不胜感激。

谢谢。

----修改后的代码不应包含[.!?]+

3 个答案:

答案 0 :(得分:1)

您只能像下面的select语句中那样尝试使用trim

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

周围没有周围的空间。

答案 1 :(得分:0)

您要从字符串末尾删除空格:

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

(模式中的'$'标记结束。)

如果这仍然行不通,则说明您正在处理一些奇怪的不可见字符,该字符不视为空格。使用

regexp_replace(queue_name, '[^0-9A-Za-z]+$', '')
取而代之的是

,它将除去字母和数字以外的所有字符。 “ $”将其限制在字符串的末尾。

答案 2 :(得分:0)

类型为CHAR(例如CHAR(8))的列始终在字段的整个宽度的右侧空白填充。因此,如果将'Queue A'存储在CHAR(8)字段中,数据库将在其末尾有帮助地添加一个空格-无法从列中删除该多余的空间。解决方案是更改字段,以便将其定义为VARCHAR2(在Oracle中首选)或VARCHAR

ALTER TABLE TABLE_QUEUE MODIFY QUEUE_NAME VARCHAR2(8);

然后数据库将只存储您提供的字符,而不会对该字段进行空白填充。

好运。