2013-02-18 2 views
-1

запрос возвращает строку, такую ​​как AAA[][]AAA[][][][]BBB[][]BBB. Мне нужно заменить четыре последовательных возвращения каретки точкой с запятой, но не последовательными двумя возвращениями каретки. Я пробовалOracle10g- Заменить множественный возврат каретки

replace(STRING,chr(13)||chr(13)||chr(13)||chr(13),';') 

, но это не влияет. Любая помощь будет оценена по достоинству.

+1

Проверьте коды ascii четырех символов, которые, по вашему мнению, возвращаются каретой: 'select ascii (substring (STRING, 9,1)), ascii (подстрока (STRING, 10,1)), ascii (подстрока (STRING, 11,1)), ascii (подстрока (STRING, 12,1)) from' ... –

+2

С «возвратом каретки» вы имеете в виду ** два ** символа, то есть «конец строки» в Windows, состоящий из двух символов с значениями ASCII 13 и 10 или только с e single character - фактический возврат каретки с значением ASCII 13? –

+0

Чтобы показать символьные значения строки, используйте функцию дампа: выберите дамп (строку) из ... – Rene

ответ

1

Используйте CHR(10) на системах linux/unix. В Windows возврат каретки состоит из двух символов CHR(10)||chr(13). На Linux:

SQL> WITH DATA AS (
    2  SELECT 'AAA 
    3 
    4 AAA 
    5 
    6 
    7 
    8 BBB 
    9 
10 BBB' txt FROM dual 
11 ) SELECT replace(txt, chr(10)||chr(10)||chr(10)||chr(10), ';') rep 
12  FROM DATA; 

REP 
------------------------------ 
AAA 

AAA;BBB 

BBB 

Поскольку вы можете использовать новые строки непосредственно в выражениях, вы можете заставить его работать на всех платформах/наборов символов с символами новой строки (я рекомендовал бы это решение, так как это портативный):

SQL> WITH DATA AS (
    2  SELECT 'AAA 
    3 
    4 AAA 
    5 
    6 
    7 
    8 BBB 
    9 
10 BBB' txt FROM dual 
11 ) SELECT replace(txt, ' 
12 
13 
14 
15 ', ';') rep FROM DATA; 

REP 
-------------------------- 
AAA 

AAA;BBB 

BBB 
+0

Это была комбинация chr (13) || chr (10) – Niranjan

Смежные вопросы