Oracle regexp_replace - удаление конечных пробелов - PullRequest
0 голосов
/ 31 октября 2018

Я ищу некоторую помощь в удалении конечных пробелов из имен в моей очереди. Ниже приведен пример таблицы, которую я использую:

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 голосов
/ 31 октября 2018

Вы хотите удалить пробел в конце строки:

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

('$' в шаблоне обозначает конец.)

Если это все еще не работает, то вы имеете дело с каким-то странным невидимым персонажем, который не считается пробелом. Используйте

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

вместо этого, который, как вы уже знаете, удаляет все символы, кроме букв и цифр. '$' Ограничивает это до конца строки.

0 голосов
/ 31 октября 2018

Столбцы типа CHAR (например, CHAR(8)) всегда заполняются пробелом справа на всю ширину поля. Поэтому, если вы храните 'Queue A' в поле CHAR(8), база данных услужливо добавляет один пробел в конец этого поля - и нет никакого способа удалить это дополнительное пространство из столбца. Решение состоит в том, чтобы изменить поле так, чтобы оно определялось как VARCHAR2 (предпочтительно в Oracle) или VARCHAR:

ALTER TABLE TABLE_QUEUE MODIFY QUEUE_NAME VARCHAR2(8);

Тогда в базе данных будут храниться только те символы, которые вы ей дадите, без заполнения поля.

Удачи.

0 голосов
/ 31 октября 2018

Вы можете попытаться использовать 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

вокруг вас нет окружающих пространств.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...