Toon posts:

[SQL] Controle op letter in veld

Pagina: 1
Acties:
  • 280 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Ik werk hier met een Oracle database, waarheen ik net wat nieuwe data ge-importeerd heb.
Nu komt er in een tabel de kolom "Huisnummer" voor.

Ik wil nu controleren of er in die kolom toevallig de tekst "t/m" of iets dergelijks voorkomt. eigenlijk moet alles wat niet numeriek is, er uit gefilterd worden (het veld is nu VARCHAR2).

Het is heel makkelijk te controleren door in de where-clausule "like '%a%' op te nemen. Maar om dat nou voor 26 keer (of meer) te doen, lijkt me niet echt efficient :P

Weet iemand of (en zo ja, hoe) dit makkelijker kan?

  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
Ondersteunt Oracle geen regexes?

  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Verwijderd schreef op 08 juli 2003 @ 17:11:
Ik wil nu controleren of er in die kolom toevallig de tekst "t/m" of iets dergelijks voorkomt. eigenlijk moet alles wat niet numeriek is, er uit gefilterd worden (het veld is nu VARCHAR2).
Wat moet er gebeuren met de rijen/kolommen waarin het voorkomt?
Glimi schreef op 08 juli 2003 @ 17:15:
Ondersteunt Oracle geen regexes?
Jawel, maar dat is natuurlijk alleen een laatste redmiddel ;)

[ Voor 98% gewijzigd door justmental op 08-07-2003 17:18 ]

Who is John Galt?


Verwijderd

Topicstarter
justmental schreef op 08 July 2003 @ 17:15:
[...]

Wat moet er gebeuren met de rijen/kolommen waarin het voorkomt?
In eerste instantie wil ik gewoon een SELECT om aan de klant te geven: "Alsje, deze kloppen niet, wat moet er mee gebeuren" :)

Daarna kan ik er altijd nog een UPDATE van maken ofzo

  • JeroenMeloen
  • Registratie: Juni 2003
  • Laatst online: 03-04 08:38
Als alles wat niet numeriek is er uit moet, waarom heb je dan niet een NUMBER veld ipv een VARCHAR2?

  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
create or replace function isnumeric (p_data in varchar2) return varchar2 as
  v_data number;
begin
  v_data := to_number (p_data);
  return 'Y';
exception
  when value_error
  then
    return 'N';
end;
/

select *
from tabel
where isnumeric (kolom) = 'N'
/

Zo zou ik het doen, een kleine procedure voor de numerieke check en deze gebruiken in je SQL.
Eventueel zou je het ook helemaal in PL/SQL op kunnen dmv een cursor en dbms_outputs.

[ Voor 6% gewijzigd door justmental op 08-07-2003 17:29 ]

Who is John Galt?


Verwijderd

Topicstarter
JeroenMeloen schreef op 08 July 2003 @ 17:22:
Als alles wat niet numeriek is er uit moet, waarom heb je dan niet een NUMBER veld ipv een VARCHAR2?
Omdat ik alles aangeleverd heb gekregen in Excel bestanden (waar dat bedrijf al jaren lang de gegevens in bijhield |:( )


Justmental: Tnx, daar ga ik morgen ff mee stoeien.

Maar er is dus geen manier om die met een "simpele" SELECT query voor elkaar te krijgen?

  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Verwijderd schreef op 08 July 2003 @ 20:04:
dus geen manier om die met een "simpele" SELECT query voor elkaar te krijgen?
Er leiden altijd meer wegen naar Rome :)
code:
1
2
3
select * 
from   tabel
where  owa_pattern.amatch(kolom,0,'.*\D') > 0

[ Voor 19% gewijzigd door justmental op 08-07-2003 20:43 . Reden: regex suxors :P ]

Who is John Galt?


Verwijderd

Topicstarter
justmental schreef op 08 July 2003 @ 20:15:
[...]

Er leiden altijd meer wegen naar Rome :)
code:
1
2
3
select * 
from   tabel
where  owa_pattern.amatch(kolom,0,'[a-zA-Z]*') > 0
Die ken ik nog niet. Toch nog ff de SQL bijbel er bij pakken morgen.

Tnx iig, behoorlijke SQL-guru?

  • Brothar
  • Registratie: Oktober 2000
  • Laatst online: 04-02 09:14

Brothar

meester

en als het huisnummer 94 a (b, c etc) is ?

eagle


  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Brothar schreef op 08 July 2003 @ 20:31:
en als het huisnummer 94 a (b, c etc) is ?
M'n regex was niet helemaal juist idd. :o
Ik heb 'em verbeterd :)

Who is John Galt?


Verwijderd

Topicstarter
Het werkt perfect. Tnx!
Alhoewel ik wel blij ben dat ik maar 28 resultaten krijg (echt snel gaat het niet) :P


Klein vraagje nog:
Ik zit ff de PLSQL reference door te lezen en ik snap nu wel wat die query doet, alleen ik kan er niet uithalen wat die '0' er tussen doet.
Deze dus: owa_pattern.amatch(huis_num,0,'.*\D')

Zet die de "teller" op 0 ofzo?

  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Verwijderd schreef op 09 July 2003 @ 09:36:
Het werkt perfect. Tnx!
Alhoewel ik wel blij ben dat ik maar 28 resultaten krijg (echt snel gaat het niet) :P


Klein vraagje nog:
Ik zit ff de PLSQL reference door te lezen en ik snap nu wel wat die query doet, alleen ik kan er niet uithalen wat die '0' er tussen doet.
Deze dus: owa_pattern.amatch(huis_num,0,'.*\D')

Zet die de "teller" op 0 ofzo?
Kijk in de header van owa_pattern, daar staat de uitleg van de parameters.
Het is de positie in de string vanaf waar ie begint geloof ik.

Who is John Galt?

Pagina: 1