Remove newlines in oracle sql - sql

Currently in address column in test table,i have data in following format,
12th street
Test avenue
Test_City
but in the output,i would require it in following format,
12th street Test avenue Test_City.
Could any one please tell me the query to use to display it in the required manner.

You can try this:
select regexp_replace(your_address,'[[:space:]]',' ') from your_tab;

Just strip chr(13) and chr(10) from the string:
declare
teststring varchar2 (32767) := ' This is the value
that I chose';
begin
dbms_output.put_line (teststring);
dbms_output.put_line (replace (replace (teststring, chr (13), ''), chr (10), ' '));
end;
The result:
This is the value
that I chose
This is the value that I chose
Two spaces since I put in two returns in the text.

Try this:
translate(' example ', chr(10) || chr(13) || chr(09), ' ')
The above will replace all line breaks (chr(10)), all tabs (chr(09)) and all carriage returns (chr(13)) with a space (' ').
Just replace ' example ' with your field name on wish you want to have the characters removed.

Another solution would be:
select trim(chr(13) FROM trim(chr(10) FROM your_column)) from your_table

Related

replace the carriage space

How to remove the carriage space using SQL query. I tried the replace (..) idea but its not working at all ? The duplicate idea is not working
I guess you should go with below code -
REPLACE(REPLACE( col_name, CHR(10)), CHR(13))
This will replace the spaces and carriage both and might solve your problem.
I generally use the test1 option:
select replace(replace('teste
return test', chr (13), ''), chr (10), ' ') test1,
translate('teste
return test', chr(10) || chr(13) || chr(09), ' ') test2
from dual;

String Concatenation + Replace

I need to remove accentes, spaces and special characters in Oracle SQL.
(I thought about using pipe and replace)
My code so far:
SELECT NR_CONHEC || ' - ' || RAZAO_SOCIAL_TRANSP FROM geq_gl_ctms_frete
For example:
7590 - J. T. TRANSPORTES LTDA. - ME
Needed output:
7590-JTTRANSPORTESLTDA-ME
You can try
select regexp_replace('7590 - J. T. TRANSPORTES LTDA. - ME','[[:space:]]|\.')
as "Result String"
from dual;
Result String
-------------------------
7590-JTTRANSPORTESLTDA-ME
For your case, replace with the following query :
SELECT regexp_replace( NR_CONHEC || ' - ' || RAZAO_SOCIAL_TRANSP,'[[:space:]]|\.')
FROM geq_gl_ctms_frete;
and if you want to remove more special chars. and accentes other than dot, add whichever you want after |\. such as |\%|\&|\è..., then those characters %, & or è are removed from the string.
this will work:
SELECT NR_CONHEC||'-'|| reexp_replace(regexp_replace(RAZAO_SOCIAL_TRANSP
RAZAO_SOCIAL_TRANSP,'.',''),' ','') FROM geq_gl_ctms_frete;
How about this?
SQL> with test (col) as
2 (select '7590 - J. T. TRANSPORTES LTDA. - ME' from dual)
3 select regexp_replace(col, '[^([:alpha:][:digit:]-)]') result
4 from test;
RESULT
-------------------------
7590-JTTRANSPORTESLTDA-ME
SQL>
I.e. replace anything that isn't a letter, a number or a hyphen with nothing.
try:
select regexp_replace (NR_CONHEC|| ' - ' || RAZAO_SOCIAL_TRANSP, '[^-0-9a-zA-Z]') as rez from geq_gl_ctms_frete ;

display multi line in as one line SQL ORACLE

Oracle column type is VARCHAR2(300) has text for all records multi lines I need to display it in one line for EX>
ID TEXT
--------------------------------------
1 Hi this is
your numbaer
102458
---------------------------------------
2 hi this is
your number
452187
Now I need to display text column as one line
ID TEXT
--------------------------------------
1 Hi this is your numbaer 102458
---------------------------------------
2 hi this is your number 452187
You want to replace line breaks with blanks supposedly. Use REGEXP_REPLACE for this.
What I often do is replace all blank space (no matter whether a single blank or tab, a group of blanks, line breaks, any combinbation thereof) with a single blank:
regexp_replace(col, '[[:space:]]+', ' ')
If you want to restrict this to control characters:
regexp_replace(col, '[[:cntrl:]]+', ' ')
Or only carriage return and line feed:
regexp_replace(col, '[' || chr(10) || chr(13) || ']+', ' ')
As an alternative you may format column TEXT with sqlplus command by sufficient data length :
SQL> col format text a100;

Postgresql - remove any whitespace from sub string

How can I remove any white space from substring of string?
For example I have this number '+370 650 12345'. I need all numbers to have this format country_code rest_of_the_number or in that example: +370 65012345. How could you achieve that with PostgreSQL?
I could use trim() function, but then it would remove all whitespace.
Assuming the column is named phone_number:
left(phone_number, strpos(phone_number, ' '))
||regexp_replace(substr(phone_number, strpos(phone_number, ' ') + 1), ' ', '', 'g')
It first takes everything up to the first space and then concatenates it with the result of replacing all spaces from the rest of the string.
If you also need to deal with other whitespace than just a space, you could use '\s' for the search value in regexp_replace()
If you are able to assume that a country code will always be present, you could try using a regular expression to capture the parts of interest. Assuming that your phone numbers are stored in a column named content in a table named numbers, you could try something like the following:
SELECT parts[1] || ' ' || parts[2] || parts[3]
FROM (
SELECT
regexp_matches(content, E'^\\s*(\\+\\d+)\\s+(\\d+)\\s+(\\d+)\\s*$') AS parts
FROM numbers
) t;
The following will work even if the country code is absent (see SQL Fiddle Demo here):
SELECT TRIM(REPLACE(REPLACE(REGEXP_REPLACE('+370 650 12345', '^((\+\d+)\s+)?(.*)$', '\1|\3'), ' ', ''), '|', ' '));
Returns: +370 65012345
SELECT TRIM(REPLACE(REPLACE(REGEXP_REPLACE('370 650 12345', '^((\+\d+)\s+)?(.*)$', '\1|\3'), ' ', ''), '|', ' '));
Returns: 37065012345
It looks for a country code (a set of numbers starting with a + sign) at the beginning, and replaces any whitespace following that code with a pipe |. It then replaces all the spaces in the resulting string with the empty string, then replaces occurrences of | with spaces! The choice of | is arbitrary, I suppose it could be any non-digit character.

Trim Whitespaces (New Line and Tab space) in a String in Oracle

I need to trim New Line (Chr(13) and Chr(10) and Tab space from the beginning and end of a String) in an Oracle query. I learnt that there is no easy way to trim multiple characters in Oracle. "trim" function trims only single character. It would be a performance degradation if i call trim function recursivelly in a loop using a function. I heard regexp_replace can match the whitespaces and remove them.
Can you guide of a reliable way to use regexp_replace to trim multiple tabspaces or new lines or combinations of them in beginning and end of a String. If there is any other way, Please guide me.
If you have Oracle 10g, REGEXP_REPLACE is pretty flexible.
Using the following string as a test:
chr(9) || 'Q qwer' || chr(9) || chr(10) ||
chr(13) || 'qwerqwer qwerty' || chr(9) ||
chr(10) || chr(13)
The [[:space:]] will remove all whitespace, and the ([[:cntrl:]])|(^\t) regexp will remove non-printing characters and tabs.
select
tester,
regexp_replace(tester, '(^[[:space:]]+)|([[:space:]]+$)',null)
regexp_tester_1,
regexp_replace(tester, '(^[[:cntrl:]^\t]+)|([[:cntrl:]^\t]+$)',null)
regexp_tester_2
from
(
select
chr(9) || 'Q qwer' || chr(9) || chr(10) ||
chr(13) || 'qwerqwer qwerty' || chr(9) ||
chr(10) || chr(13) tester
from
dual
)
Returning:
REGEXP_TESTER_1: "Qqwerqwerqwerqwerty"
REGEXP_TESTER_2: "Q qwerqwerqwer qwerty"
Hope this is of some use.
This how I would implement it:
REGEXP_REPLACE(text,'(^[[:space:]]*|[[:space:]]*$)')
How about the quick and dirty translate function?
This will remove all occurrences of each character in string1:
SELECT translate(
translate(
translate(string1, CHR(10), '')
, CHR(13), '')
, CHR(09), '') as massaged
FROM BLAH;
Regexp_replace is an option, but you may see a performance hit depending on how complex your expression is.
You could use both LTRIM and RTRIM.
select rtrim(ltrim('abcdab','ab'),'ab') from dual;
If you want to trim CHR(13) only when it comes with a CHR(10) it gets more complicated. Firstly, translated the combined string to a single character. Then LTRIM/RTRIM that character, then replace the single character back to the combined string.
select replace(rtrim(ltrim(replace('abccccabcccaab','ab','#'),'#'),'#'),'#','ab') from dual;
TRANSLATE (column_name, 'd'||CHR(10)||CHR(13), 'd')
The 'd' is a dummy character, because translate does not work if the 3rd parameter is null.
For what version of Oracle? 10g+ supports regexes - see this thread on the OTN Discussion forum for how to use REGEXP_REPLACE to change non-printable characters into ''.
I know this is not a strict answer for this question, but I've been working in several scenarios where you need to transform text data following these rules:
No spaces or ctrl chars at the beginning of the string
No spaces or ctrl chars at the end of the string
Multiple ocurrencies of spaces or ctrl chars will be replaced to a single space
Code below follow the rules detailed above:
WITH test_view AS (
SELECT CHR(9) || 'Q qwer' || CHR(9) || CHR(10) ||
CHR(13) || ' qwerqwer qwerty ' || CHR(9) ||
CHR(10) || CHR(13) str
FROM DUAL
) SELECT
str original
,TRIM(REGEXP_REPLACE(str, '([[:space:]]{2,}|[[:cntrl:]])', ' ')) fixed
FROM test_view;
ORIGINAL FIXED
---------------------- ----------------------
Q qwer Q qwer qwerqwer qwerty
qwerqwer qwerty
1 row selected.
If at all anyone is looking to convert data in 1 variable that lies in 2 or 3 different lines like below
'Data1
Data2'
And you want to display data as 'Data1 Data2' then use below
select TRANSLATE ('Data1
Data2', ''||CHR(10), ' ') from dual;
it took me hrs to get the right output. Thanks to me I just saved you 1 or 2 hrs :)
In cases where the Oracle solution seems overly convoluted, I create a java class with static methods and then install it as a package in Oracle. This might not be as performant, but you will eventually find other cases (date conversion to milliseconds for example) where you will find the java fallback helpful.
Below code can be used to Remove New Line and Table Space in text column
Select replace(replace(TEXT,char(10),''),char(13),'')
Try the code below.
It will work if you enter multiple lines in a single column.
create table products (prod_id number , prod_desc varchar2(50));
insert into products values(1,'test first
test second
test third');
select replace(replace(prod_desc,chr(10),' '),chr(13),' ') from products where prod_id=2;
Output :test first test second test third
TRIM(BOTH chr(13)||chr(10)||' ' FROM str)
Instead of using regexp_replace multiple time use (\s) as given below;
SELECT regexp_replace('TEXT','(\s)','')
FROM dual;
Fowloing code remove newline from both side of string:
select ltrim(rtrim('asbda'||CHR(10)||CHR(13) ,''||CHR(10)||CHR(13)),''||CHR(10)||CHR(13)) from dual
but in most cases this one is just enought :
select rtrim('asbda'||CHR(10)||CHR(13) ,''||CHR(10)||CHR(13))) from dual
UPDATE My_Table
SET Mycolumn1 =
TRIM (
TRANSLATE (Mycolumn1,
CHR (10) || CHR (11) || CHR (13),
' '))
WHERE ( INSTR (Mucolumn1, CHR (13)) > 0
OR INSTR (Mucolumn1, CHR (10)) > 0
OR INSTR (Mucolumn1, CHR (11)) > 0);