[SQL] Like: underscore negeren

Pagina: 1
Acties:

  • Rambo
  • Registratie: Maart 2001
  • Laatst online: 19-12-2024
situatie:

Een query die op een gedeelte van een emailadres zoekt en het emailadres teruggeeft.
Ik gebruik hiervoor een like met een % wildcard. Ik wil de _ wildcard negeren omdat een emailadres een underscore kan bevatten. Ik wil dit niet als een wildcard beschouwen in de query omdat je anders de volgende situatie kunt krijgen:

code:
1
select email from persons where email like 'marc_jansen%';


result:
email
marc_jansen@hotmail.com
marcojansen@hotmail.com

marcojansen@hotmail.com wil ik niet vinden.

Nu kun je een escape karakter gebruiken:

code:
1
select email from persons where email like 'marc/_jansen%' escape '/';


result:
email
marc_jansen@hotmail.com

Ok. Dat is goed. Maar nu weet ik waar ik de escape moet plaatsen. Ik heb dadelijk de volgende query:

code:
1
select email from persons where email like '<variabele>%';


<variabele> wordt extern bepaald, ik kan niet weten waar in de variabele een escape moet worden geplaatst.
Eigenlijk zou ik dus de hele underscore als wildcard niet willen gebruiken.

Heeft iemand een idee hoe ik dit voor elkaar krijg?

escape info: http://www.adp-gmbh.ch/ora/sql/like.html
Over escape is genoeg info te vinden, maar dan is van te voren bekend waar je deze precies toepast, ik kan dat niet van te voren bepalen.

  • whoami
  • Registratie: December 2000
  • Laatst online: 22:26
Je kan toch, in je variable je escape character gaan plaatsen voor je deze aan je query assigned ?
Ik bedoel; voor je je var toewijst aan de parameter van je query, checken of er een underscore in staat, en indien ja, dan escape je die ?

https://fgheysels.github.io/


  • Niemand_Anders
  • Registratie: Juli 2006
  • Laatst online: 09-07-2024

Niemand_Anders

Dat was ik niet..

Ik neem aan dat de gebruiker zelf niet de _ en % wildcards gebruikt bij het zoeken. Gebruikers zijn meestal gewend om de ? en * wildcards te gebruiken. Dat betekend dus in dat laatste geval dat je gewoon de _ en % kunt escapen zoals het behoort. Als laatste dient je de zoek wildcards te vervangen door de sql wildcards. Als optimalisatie is het verstandig om te kijken of in de zoekopdracht wel wildcards zitten, want anders kun je natuurlijk '=' ipv like gebruiken.

If it isn't broken, fix it until it is..


  • leuk_he
  • Registratie: Augustus 2000
  • Laatst online: 01-11 22:03

leuk_he

1. Controleer de kabel!

Je kunt toch (met replace) de %variable% behandelen?

(Denk je ook aan sql injection?)

Need more data. We want your specs. Ik ben ook maar dom. anders: forum, ff reggen, ff topic maken
En als je een oplossing hebt gevonden laat het ook ujb ff in dit topic horen.


  • Rambo
  • Registratie: Maart 2001
  • Laatst online: 19-12-2024
Het is nogal een complexe applicatie.
Het van te voeren escapen is geen optie omdat tussen de invoer van de waarde en het doorgeven van deze waarde aan de query nog een applicatie zit waarin deze waarde wordt opgeslagen en ergens anders weer wordt gebruikt.

Het van te voren escapen en dan doorgeven naar de query gaat dus niet goed komen, het is in ieder geval niet gewenst.

De input komt in dit geval niet van de gebruiker maar van het systeem. Gebruik van Replace gaat denk ik werken :) Even kijken.

edit:
Ja het werk, dit wordt hem:

code:
1
and  pd0.str_val    like replace('%<variabele>','_','/_') escape '/'


Bedankt voor het meedenken.

[ Voor 13% gewijzigd door Rambo op 06-06-2008 10:19 ]