Как убрать все в поле после перевода строки или возврата каретки - PullRequest
1 голос
/ 20 сентября 2019

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

Например, поле содержит

John Smith
John Smith

Вместо просто:

John Smith

Я думал, что какое-то regexp_replace, как показано ниже, будет работать для обновления поля и удаления как новой строки / CR, так и текста после него, но я не могу заставить его работать.

UPDATE TABLE
SET field =REGEXP_REPLACE(NAME, chr(13), '')
WHERE    ACCOUNT   = 123456

Я ожидаю, что обновление превратит

John Smith
John Smith

в

John Smith

Ответы [ 2 ]

2 голосов
/ 20 сентября 2019

Рассмотрим:

UPDATE my_table 
SET my_column = REGEXP_REPLACE(my_column , chr(13) || '.*$', '', 1, 0, 'n') 
WHERE ACCOUNT = 123456

Обоснование:

  • chr(13) || '.*' соответствует от (первой) новой строки до конца строки (ужасно)
  • соответствующая часть строки будет заменена пустой строкой
  • , последняя опция 'n' позволяет символу точки совпадать на новых строках (по умолчанию это не так)

Демонстрация на DB Fiddle :

WITH a AS (SELECT 'John Smith' || chr(13) || 'John Smith' txt FROM DUAL)
SELECT 
    a.txt,
    REGEXP_REPLACE(a.txt, chr(13) || '.*', '', 1, 0, 'n') new_txt
FROM a;
TXT                   | NEW_TXT   
:-------------------- | :---------
John Smith            | John Smith 
John Smith            | 

Примечание: как прокомментировано @ Alex Poole , если вы хотите сопоставить си новую строку и возврат каретки, вы можете использовать:

'('||chr(13)||'|'||chr(10)||').*'
0 голосов
/ 20 сентября 2019

Я думаю, что вы хотите:

UPDATE TABLE
    SET field = REGEXP_SUBSTR(NAME, '^[^' || CHAR(13) || ']*')
    WHERE ACCOUNT = 123456;

Конечно, это возвращает первую строку .Если вы хотите последнюю строку:

UPDATE TABLE
    SET field = REGEXP_SUBSTR(NAME, '[^\n]*$')
    WHERE ACCOUNT = 123456;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...