我正在寻找有关从队列名称中删除尾随空格的帮助。以下是我正在使用的表的示例:
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,因此不确定是否需要更改代码以在队列名称之间保留空格,因此如果有人可以建议我如何解决此问题,将不胜感激。
谢谢。
----修改后的代码不应包含[.!?]+
答案 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);
然后数据库将只存储您提供的字符,而不会对该字段进行空白填充。
好运。