Remove duplicated number in column

Problem Last time I have a problem with duplicated number in post address (column). Our callback interfaces write to us many error_number. Bad formatted duplicated numbers. So first I have to find where is and how many this number are. How remove duplicated in field number? Bad numbers: CREATE TABLE locations ( site_number INT, ADR_STREET_NO

Problem Last time I have a problem with duplicated number in post address (column). Our callback interfaces write to us many error_number. Bad formatted duplicated numbers. So first I have to find where is and how many this number are. How remove duplicated in field number? Bad numbers: CREATE TABLE locations ( site_number INT, ADR_STREET_NO

Problem

Last time I have a problem with duplicated number in post address (column). Our callback interfaces write to us many error_number. Bad formatted duplicated numbers. So first I have to find where is and how many this number are. How remove duplicated in field number?

Bad numbers:

CREATE TABLE locations
(
   site_number     INT,
   ADR_STREET_NO   VARCHAR (7)
);

INSERT INTO locations (site_number, ADR_STREET_NO) VALUES (2, '22 22');
INSERT INTO locations (site_number, ADR_STREET_NO) VALUES (1, '1 111');
INSERT INTO locations (site_number, ADR_STREET_NO) VALUES (3, '3 3');
INSERT INTO locations (site_number, ADR_STREET_NO) VALUES (3, '43 645');
INSERT INTO locations (site_number, ADR_STREET_NO) VALUES (3, '72 85');
INSERT INTO locations (site_number, ADR_STREET_NO) VALUES (3, '23 95');
INSERT INTO locations (site_number, ADR_STREET_NO) VALUES (3, '711 711');
SITE_NUMBER ADR_STREET_NO
2 22 22
1 1 111
3 3 3
3 43 645
3 72 85
3 23 95
3 711 711

How to solve the problem?

SELECT l.site_number, l.ADR_STREET_NO, REGEXP_REPLACE (l.ADR_STREET_NO, '([^ ]+)( \1)+', '\1')
FROM mibp_owner.locations l
WHERE REGEXP_LIKE (ADR_STREET_NO, '\d \d'); 
--
UPDATE mibp_owner.locations l
SET l.ADR_STREET_NO = REGEXP_REPLACE (l.ADR_STREET_NO, '([^ ]+)( \1)+', '\1')
WHERE REGEXP_LIKE (ADR_STREET_NO, '\d \d');
ITE_NUMBER ADR_STREET_NO REGEXP_REPLACE(L.ADR_STREET_NO,'([^]+)(\1)+’,’\1′)
2 22 22 22
1 1 111 111
3 3 3 3
3 43 645 43 645
3 72 85 72 85
3 23 95 23 95
3 711 711 711

After update:

SELECT l.site_number, l.ADR_STREET_NO, REGEXP_REPLACE (l.ADR_STREET_NO, '([^ ]+)( \1)+', '\1')
  FROM locations l
 WHERE REGEXP_LIKE (ADR_STREET_NO, '\d \d');
SITE_NUMBER ADR_STREET_NO REGEXP_REPLACE(L.ADR_STREET_NO,'([^]+)(\1)+’,’\1′)
3 43 645 43 645
3 72 85 72 85
3 23 95 23 95

This example online: http://sqlfiddle.com/#!4/b84dbf/1.

RegEx is explained in SQL – Search for a particular string in Oracle CLOB column

Function to remove double number:

CREATE OR REPLACE FUNCTION rem_dubble (n in VARCHAR2)
   RETURN VARCHAR2
IS
  ind integer;
  t1 varchar2(100);
  t2 varchar2(100);
BEGIN
  if is_no_dubbled(n)='N' then
    return n;
  end if;
  for i in 1..10 loop
    ind:=instr(n,' ',1,i);
    if ind=0 then
      exit;
    end if;
    t1:=trim(substr(n,1,ind));
    t2:=trim(substr(n,ind));
    if t1=t2 then
      return rem_dubble(t1);
    end if;
  end loop;
  return n;
END;
/

Create function to find duplicate and sign it:

CREATE OR REPLACE FUNCTION is_no_dubbled (n in VARCHAR2)
   RETURN VARCHAR2
IS
  ind integer;
  t1 varchar2(100);
  t2 varchar2(100);
BEGIN
  if instr(n,' ')=0 then return 'N'; end if;
  for i in 1..10 loop
    ind:=instr(n,' ',1,i);
    if ind=0 then
      exit;
    end if;
    t1:=trim(substr(n,1,ind));
    t2:=trim(substr(n,ind));
    if t1=t2 then
      return 'Y';
    end if;
  end loop;
  return 'N';
END;
Subscribe
Notify of
guest
0 Comments
Newest
Oldest Most Voted
Inline Feedbacks
View all comments