SQL vraag

Plaats reactie
Gebruikersavatar
guntherstassen
Pro Member
Pro Member
Berichten: 311
Lid geworden op: 09 feb 2011, 20:16
Locatie: Sint-Truiden
Uitgedeelde bedankjes: 12 keer
Bedankt: 27 keer
Contacteer:

Ik zit met het volgende probleem :

In een database is er een kolom "bestelnummer" waar van dat de inhoud steeds de volgende stramienen heeft :
1-45654-45
1-47546-87
1-57546-77
9-4454545
8-4565499

Ik krijg bv een parameter met de volgende waarde 15456544 om te zoeken in de SQL database.
Ik doe een "select * "-query uitvoeren en telkens het veld "bestelnummer" de "-"-tekens er uit halen en dan controleren als er een overeenkomst is.
Is er een mogelijkheid dat ik dat allemaal in een query kan steken zodat ik niet een volledige database zelf moet aflopen om een match te vinden?
DarkV
Elite Poster
Elite Poster
Berichten: 2798
Lid geworden op: 17 apr 2019, 11:47
Uitgedeelde bedankjes: 88 keer
Bedankt: 112 keer

select * from table where replace(bestelnummer, '-') = tezoekenbestelnummer
wim.pi
Starter
Starter
Berichten: 23
Lid geworden op: 28 jul 2011, 09:45
Uitgedeelde bedankjes: 1 keer
Bedankt: 2 keer

Dan heb je in de DB nog een full table scan; dus als het performant moet zijn ben je er nog niet. (Al wel enorm veel performanter dan eerst de DB binnen te trekken natuurlijk).
Je zou dan beter ook een index hebben op de opgekuiste waarde...

Code: Selecteer alles

create unique index bestelnummer_idx on bestelling (replace(bestelnummer, '-'))
tizzen33
Member
Member
Berichten: 60
Lid geworden op: 30 mar 2017, 10:14
Uitgedeelde bedankjes: 1 keer
Bedankt: 15 keer

Kan je niet beter aan je zoekparameter de dashes toevoegen voor je de query uitvoert?
Gebruikersavatar
Sasuke
Elite Poster
Elite Poster
Berichten: 4854
Lid geworden op: 13 aug 2003, 20:25
Locatie: Vlaanderen
Uitgedeelde bedankjes: 153 keer
Bedankt: 332 keer
Contacteer:

Dat dacht ik ook te zeggen, eerst de transform van je data doen en dan de query uitvoeren ?
Who the fxxk is General Failure and why is he reading my hard disk ?
Afbeelding
Gebruikersavatar
guntherstassen
Pro Member
Pro Member
Berichten: 311
Lid geworden op: 09 feb 2011, 20:16
Locatie: Sint-Truiden
Uitgedeelde bedankjes: 12 keer
Bedankt: 27 keer
Contacteer:

bedankt voor jullie reactie. de snelheid van de query is nu veel beter ;-)
8balljunkie
Pro Member
Pro Member
Berichten: 352
Lid geworden op: 30 mei 2012, 10:31
Uitgedeelde bedankjes: 29 keer
Bedankt: 29 keer

Als je de programmatie niet kan aanpassen is het handig om gewoon in een aparte kolom het bestelnr te bewaren zonder de -

Ik weet niet welke database vendor je hebt, maar als default verwijzing niet gaat kan je dat nog altijd via een trigger.
DarkV
Elite Poster
Elite Poster
Berichten: 2798
Lid geworden op: 17 apr 2019, 11:47
Uitgedeelde bedankjes: 88 keer
Bedankt: 112 keer

tizzen33 schreef:Kan je niet beter aan je zoekparameter de dashes toevoegen voor je de query uitvoert?
Op het eerste gezicht zit er niet echt een logica in de formatering (het is alvast niet 1-5-2).
Gebruikersavatar
Block
Erelid
Erelid
Berichten: 1740
Lid geworden op: 31 jul 2005, 01:08
Uitgedeelde bedankjes: 130 keer
Bedankt: 76 keer

Oplossing van 8balljunkie lijkt mij ook de beste. Zeker als een andere server gegevens uitleest van je database.
select replace * from userbase.be where topic ('got hostile', 'got friendly and polite');
cptKangaroo
Elite Poster
Elite Poster
Berichten: 2759
Lid geworden op: 18 dec 2004, 14:33
Locatie: 053 Aalst
Uitgedeelde bedankjes: 551 keer
Bedankt: 194 keer

Als je zeker bent van de unieke IDs kan je misschien nog een beperking van 1 resultaat toevoegen?
Plaats reactie

Terug naar “Development”