Vinnaren i pepparkakshustävlingen!
2017-05-31, 23:44
  #1
Medlem
Hej,

Är det någon som knåpat ihop en regexp_like för att identifiera avvik i en databas. Svenska gatunamn kan ju ex innehålla ":", tyska och nordiska bokstäver,"-", mellanslag etc.. Någon idé?
Citera
2017-06-01, 12:38
  #2
Medlem
Kaustis avatar
Citat:
Ursprungligen postat av larza83
Hej,

Är det någon som knåpat ihop en regexp_like för att identifiera avvik i en databas. Svenska gatunamn kan ju ex innehålla ":", tyska och nordiska bokstäver,"-", mellanslag etc.. Någon idé?

Din fråga är helt kasst ställd min vän. Vad definierar du som "avvik", vad för data finns det i kolumnerna i databasen med mera?
Citera
2017-06-01, 14:49
  #3
Medlem
Citat:
Ursprungligen postat av Kausti
Din fråga är helt kasst ställd min vän. Vad definierar du som "avvik", vad för data finns det i kolumnerna i databasen med mera?

Är beredd att hålla med dig.. Gick nog lite väl snabbt där igår kväll när jag körde fast.

Har separat kolumn för STREETNAME som jag skulle vilja identifiera ev. konstigheter i. När jag ser över adresser är det givet att följande tecken är ok: Aa-Zz, 0-9, :, Éé, Üü, [space], ÅÖÄåäö, punkt (.), bindestreck (-). Så de entries som innehåller tecken utöver ovan skulle jag vilja plocka ut.

Så:

select * from tablex
where not REGEXP_LIKE (streetname, xxxxx)
Citera
2017-06-02, 10:30
  #4
Medlem
Bortamatchens avatar
Citat:
Ursprungligen postat av larza83
Är beredd att hålla med dig.. Gick nog lite väl snabbt där igår kväll när jag körde fast.

Har separat kolumn för STREETNAME som jag skulle vilja identifiera ev. konstigheter i. När jag ser över adresser är det givet att följande tecken är ok: Aa-Zz, 0-9, :, Éé, Üü, [space], ÅÖÄåäö, punkt (.), bindestreck (-). Så de entries som innehåller tecken utöver ovan skulle jag vilja plocka ut.

Så:

select * from tablex
where not REGEXP_LIKE (streetname, xxxxx)

Du skulle kunna lägga dina svartlistade tecken i en egen tabell.

då blir det typ

select distinct x.* from tablex x, blacklist b
where x.streetname like '%'+ b.tecken +'%'

Har du inte med distinct så får du en rad per tecken om det råkar vara fler konstiga tecken i samma namn.
Citera
2017-06-02, 10:58
  #5
Medlem
Kaustis avatar
Citat:
Ursprungligen postat av larza83
Är beredd att hålla med dig.. Gick nog lite väl snabbt där igår kväll när jag körde fast.

Har separat kolumn för STREETNAME som jag skulle vilja identifiera ev. konstigheter i. När jag ser över adresser är det givet att följande tecken är ok: Aa-Zz, 0-9, :, Éé, Üü, [space], ÅÖÄåäö, punkt (.), bindestreck (-). Så de entries som innehåller tecken utöver ovan skulle jag vilja plocka ut.

Så:


Jag hade nog gjort det någonting sånt här:

Kod:
/*
	Select all addresses that is not in "valid addresses" 
*/
select * from tablex where id not in (
	/*
		Select all valid addresses
	*/
	select id from tablex
	where REGEXP_LIKE (streetname, [A-Za-z0-9:ÉéÜü\sÅÄÖåäö\.\-]+)
)

Oklart huruvida syntax är helt korrekt, men jag hade nog snabblöst det så här. Finns kanske bättre sätt dock, men det här bör funka fint.
Citera
2017-06-03, 02:38
  #6
Medlem
Sgt.McBadasss avatar
Ett tips om du håller på å fipplar med regexpar är https://regex101.com/ där du kan testköra dom snabbt och enkelt.

Citat:
Ursprungligen postat av Kausti
Jag hade nog gjort det någonting sånt här:

Kod:
/*
	Select all addresses that is not in "valid addresses" 
*/
select * from tablex where id not in (
	/*
		Select all valid addresses
	*/
	select id from tablex
	where REGEXP_LIKE (streetname, [A-Za-z0-9:ÉéÜü\sÅÄÖåäö\.\-]+)
)

Oklart huruvida syntax är helt korrekt, men jag hade nog snabblöst det så här. Finns kanske bättre sätt dock, men det här bör funka fint.


Varför ha REGEXP_LIKE i en subquery? Kan man inte ha ett ensamt statement som hämtar alla avvikande adresser direkt,

SELECT * FROM tablex WHERE NOT REGEXP_LIKE (streetname, [A-Za-z0-9:ÉéÜü\sÅÄÖåäö\.\-]+)

så slipper jämföra alla eventuella avvikelser med hela tabellen?
eller kan man inte välja false på en REGEXP_LIKE?
Citera
2017-06-03, 15:56
  #7
Medlem
Kaustis avatar
Citat:
Ursprungligen postat av Sgt.McBadass
eller kan man inte välja false på en REGEXP_LIKE?

Jag har för mig att jag stött på någonting sånt tidigare, men kan inte minnas ville situation det var i. Kan ju ha varit något fel jag gjorde också, men det var därför jag skrev det hela som jag skrev. NOT REGEXP_LIKE kan säkert fungera precis lika bra.

Sen är jag mer en Postgres-kille än en Oracle-kille också.
Citera
2017-06-07, 11:08
  #8
Medlem
Bortamatchens avatar
Citat:
Ursprungligen postat av Kausti
Jag har för mig att jag stött på någonting sånt tidigare, men kan inte minnas ville situation det var i. Kan ju ha varit något fel jag gjorde också, men det var därför jag skrev det hela som jag skrev. NOT REGEXP_LIKE kan säkert fungera precis lika bra.

Sen är jag mer en Postgres-kille än en Oracle-kille också.
Jag tolkat visserligen den ursprungliga frågan som att han faktiskt vill lista de avvikande. Då behöver man inte ha en metod for att invertera resultatet alls.
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback