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);
那么数据库将只存储你给它的字符,而不用空格填充字段。
祝你好运。
我正在寻求有关从我的队列名称中删除尾随 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);
那么数据库将只存储你给它的字符,而不用空格填充字段。
祝你好运。