Oracle удалить перенос строки

Обновлено: 17.05.2024

Я снова застрял, пытаясь получить свои данные в формате, который мне нужен. У меня есть текстовое поле, которое выглядит так.

" deangelo 001 deangelo

местное происхождение имени: italain

от американского имени deangelo

значение: of the angels

эмоциональный спектр • он-источник радости для всех.

личная целостность • его доброе имя является его самым ценным имущество. личности • трудно парить с орлами, когда тебя окружают индейки! отношения * начинаются медленно, но отношения с Дианджело строит со временем. путешествия и отдых • путешествие на всю жизнь в его будущем.

карьера и деньги * одаренный ребенок, deangelo должен быть постоянно бросали вызов.

в жизни • радость и счастье ждут этого благословенного человека.

Счастливые числа Дианджело: 12 • 38 • 18 • 34 • 29 • 16

"

каким будет лучший способ в Postgresql удалить возврат каретки и новые строки? Я пробовал несколько вещей, и никто из них не хочет вести.

спасибо заранее, Адам!--2-->

у меня была та же проблема в моем postgres d/b, но новая строка, о которой идет речь, не была традиционной ascii CRLF, это был разделитель строк unicode, символ U2028. Приведенный выше фрагмент кода также захватит этот вариант unicode.

обновление. хотя я только когда-либо сталкивался с вышеупомянутыми персонажами "в дикой природе", чтобы следовать совету lmichelbacher перевести еще больше unicode newline-like символы, используйте это:

OP спросил конкретно о регулярных выражениях, так как, похоже, есть озабоченность по поводу ряда других символов, а также новых строк, но для тех просто желая удалить новые строки, вам даже не нужно идти в регулярное выражение. Вы можете просто сделать:

Я думаю, что это стандартное поведение SQL, поэтому оно должно распространяться на все, кроме, возможно, самых ранних версий Postgres. Вышеуказанные испытания для меня 9.4 и 9.2

В случае, если вам нужно удалить разрывы строк из начала или конца строки, вы можете использовать это:

имейте в виду, что шляпа ^ означает начало строки и знак доллара $ означает конец строки.

У нас есть таблица со столбцом varchar2(100) , которая иногда содержит возврат каретки и перевод строки. Мы хотели бы удалить эти символы в запросе SQL. Мы используем:

который не имеет никакого эффекта , однако замена CHR (10) на более обычный символ "буква" доказывает, что функция REPLACE работает иначе. Мы также обнаружили, что

находит location новой строки, но вставляет подчеркивание после него, а не заменяет его.

Работает на Oracle8i. Обновление не вариант.

Другой способ - использовать TRANSLATE :

«X» - это любой символ, который вы не хотите переводить в ноль, потому что TRANSLATE не будет работать правильно, если 3-й параметр - ноль.

Ах ах! Кейд на деньги.

Артефакт в TOAD печатает \r\n как два символа-заполнителя «blob», но печатает один \r также как два заполнителя. Первым шагом к решению является использование ..

.. но я выбрал немного более надежный ..

.. который ловит оскорбительные символы в любом порядке. Большое спасибо Кейду.

Вы уверены, что ваша новая строка не CHR(13) + CHR(10) , в этом случае вы получите CHR(13) + '_' , которая все еще может выглядеть как новая строка?

Попробуйте REPLACE(col_name, CHR(13) + CHR(10), '')

Если данные в вашей базе данных POSTED из HTML-элементов управления TextArea, разные браузеры используют разные символы новой строки:

Firefox разделяет строки только с CHR (10)

Internet Explorer разделяет строки с помощью CHR (13) + CHR (10)

Apple (pre-OSX) разделяет строки только с CHR (13)

Так что вам может понадобиться что-то вроде:

Просто хотел оставить записку. У меня были проблемы с форматированием текстового поля 4000, которое имело собственный разум, и текст в отчете казался случайным (или не) переносом. Когда я обновил столбец, используя замену chr (10), отмеченную выше. Мой отчет окончательно отформатирован так, как я хотел. Большое спасибо!

Если ваш символ новой строки - CRLF , это означает, что это CHR(13) , за которым следует CHR(10) . Если вы REPLACE(input, CHR(10), '_') , это превращается в CHR(13) с последующим подчеркиванием. Поскольку CR сам по себе может отображаться так же хорошо, как и символ новой строки, он будет выглядеть для вас, как если бы после вашей новой строки было вставлено подчеркивание, но фактически только половина новой строки была заменены.

Используйте REPLACE(REPLACE(input, CHR(13)), CHR(10)) для замены всех CR и LF .

Функция Oracle/PLSQL REGEXP_REPLACE является расширением функции REPLACE. Эта функция, введенная в Oracle 10g, позволит вам заменить последовательность символов в строке другим набором символов, используя сопоставление шаблонов регулярных выражений.

Синтаксис

Синтаксис функции Oracle/PLSQL REGEXP_REPLACE :

REGEXP_REPLACE( string, pattern [, replacement_string [, start_position [, nth_appearance [, match_parameter ] ] ] ] )

Параметры или аргументы

string
Строка для поиска. Это могут быть CHAR, VARCHAR2, NCHAR, NVARCHAR2, CLOB или NCLOB.

pattern
Шаблон. Регулярное выражение для сопоставления. Это может быть комбинацией следующих значений:

Значение Описание
^ Соответствует началу строки. При использовании match_parameter с m , соответствует началу строки в любом месте в пределах выражения.
$ Соответствует концу строки. При использовании match_parameter с m , соответствует концу строки в любом месте в пределах выражения.
* Соответствует нолю или более вхождений.
+ Соответствует одному или более вхождений.
? Соответствует нолю или одному вхождению.
. Соответствует любому символу, кроме NULL.
| Используется как "OR", чтобы указать более одной альтернативы.
[ ] Используется для указания списка совпадений, где вы пытаетесь соответствовать любому из символов в списке.
[^ ] Используется для указания списка nonmatching, где вы пытаетесь соответствовать любому символу, за исключением тех кто в списке.
( ) Используется для групповых выражений в качестве подвыражений.
Соответствует m раз.
Соответствие как минимум m раз.
Соответствие как минимум m раз, но не более n раз.
\n n представляет собой число от 1 до 9. Соответствует n -му подвыражению находящемуся в ( ) перед \n.
[..] Соответствует одному сопоставлению элемента, который может быть более одного символа.
[::] Соответствует классу символов.
[==] Соответствует классу эквивалентности
\d Соответствует цифровому символу.
\D Соответствует не цифровому символу.
\w Соответствует текстовому символу.
\W Соответствует не текстовому символу.
\s Соответствует символу пробел.
\S Соответствует не символу пробел.
\A Соответствует началу строки или соответствует концу строки перед символом новой строки.
\Z Соответствует концу строки.
*? Соответствует предыдущему шаблону ноль или более вхождений.
+? Соответствует предыдущему шаблону один или более вхождений.
?? Соответствует предыдущему шаблону ноль или одному вхождению.
? Соответствует предыдущему шаблону n раз.
? Соответствует предыдущему шаблону, по меньшей мере n раз.
? Соответствует предыдущему шаблону, по меньшей мере n раз, но не более m раз.

replacement_string
Необязательный. Соответствующие шаблоны в строке будут заменены на replace_string . Если параметр replacement_string опущен, то функция просто удаляет все совпадающие шаблоны и возвращает полученную строку.

start_position
Необязательный. Это позиция в строке, откуда начнется поиск. Если этот параметр опущен, по умолчанию он равен 1, который является первой позицией в строке.

nth_appearance
Необязательный. Это n -й вид шаблона в строке. Если этот параметр опущен, по умолчанию он равен 1, который является первым вхождением шаблона в строке. Если вы укажете 0 для этого параметра, все вхождения шаблона в строке будут заменены.

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

Значение Описание
'c' Выполняет чувствительное к регистру согласование.
'i' Выполняет не чувствительное к регистру согласование.
'n' Позволяет период символа (.) для соответствия символа новой строки. По умолчанию, период метасимволы.
'm' Выражение допускает, что есть несколько строк, где ^ это начало строки, а $ это конец строки, независимо от позиции этих символов в выражении. По умолчанию предполагается, что выражение в одной строке.
'x' Игнорируются символы пробелов. По умолчанию, символы пробелов совпадают, как и любой другой символ.

Функция REGEXP_REPLACE возвращает строковое значение.

Примечание

  • Если для параметра match_parameter имеются противоречивые значения, функция REGEXP_REPLACE будет использовать последнее значение.
  • См. также функцию REPLACE.

Применение

Функция REGEXP_REPLACE может использоваться в следующих версиях Oracle/PLSQL:

Пример совпадения с первым словом

Рассмотрим пример использования функции REGEXP_REPLACE для замены первого слова в строке.

В посте рассматриваются однострочные функции SUBSTR и INSTR, работающие с символьными данными.

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

Функции манипулирования символами используются для извлечения, преобразования и форматирования символьных строк. К этому классу относятся функции CONCAT, LENGTH, LPAD, RPAD, TRIM, REPLACE и рассматриваемые нижу функции SUBSTR и INSTR.

Функция SUBSTR принимает три параметра и возвращает строку, состоящую из количества символов, извлеченных из исходной строки, начиная с указанной начальной позиции:

SUBSTR (строка, начальная позиция, количество символов).

В приведенном примере извлекаются символы с первой по четвертую позиции из значений колонки last_name. Для сравнения выводятся исходные значения колонки last_name.


Функция INSTR возвращает число, представляющее позицию в исходной строке, начиная с заданной начальной позиции, где n-ное вхождение элемента поиска начинается:

INSTR (строка, элемент поиска, [начальная позиция], [n-ное вхождение элемента поиска]

Следующий запрос показывает позицию строчной буквы a для каждой строки колонки last_name. Если в строке встречаются два или более символов a, то будет отображена позиция первого/начального из них. Для сравнения и анализа выводятся исходные значения колонки.


Если необходимо также отобразить позицию заглавной буквы А в фамилии, то надо предварительно перевести все символы фамилии в строчные, используя вложенную функцию LOWER. Запрос выглядит следующим образом:


Как видно из результата, теперь позиция заглавной буквы A тоже определяется, например, для Abel, Ande, Atkinson, Austin возвращается значение 1.

В посте приведен пример совместного применения таких функций, как LENGTH, SUBSTR и INSTR.

Читайте также: