Acces Query

Status
Niet open voor verdere reacties.

hjoosten013

Gebruiker
Lid geworden
15 dec 2012
Berichten
30
Beste

Wie kan mij uitleggen hoe ik de drie kollomen acces/query de kollom code/pallet/aantal uit elkaar kan trekken.

1 Voor de kollom code het getal/tekst voor de - (kan ook spatie zijn).
2 Voor de kollom Pallet de getallen tussen het eerste - en het laatste - (kan ook spatie zijn).
3 Voor de kollom Aantal de getallen die na het laatste - staan (kan ook spatie zijn).

Code Pallet Aantal
2-277395900-2
 
JE zou eens kunnen kijken naar "left" voor de eerste (als het altijd 4 getallen zijn is left 4, genoeg)

Voor de rest neem eens een kijkje naar substring
 
Hallo mastermindz

Hellaas heb ik al vanalles geprobeerd zowel left als richt, alleen zijn de posities verschillend en is dit niet de oplossing
Ben dus afhankelijk van de positie van de eerste - en de laatste -

Mischien dat je daar iets op hebt
 
Voor je eerste:

[SQL]SELECT SUBSTRING_INDEX(column_name, '-', 1)[/SQL]

Of spatie:

[SQL]SELECT SUBSTRING_INDEX(column_name, ' ', 1)[/SQL]

voor je tweede heb je regular expressions nodig:
PS: ongeteste code :D
[SQL]
SELECT SUBSTRING(columnnaam,LOCATE(' ',columnnaam),LOCATE(' ',columnnaam,(LOCATE(' ',columnnaam)+1))-LOCATE(' ',columnnaam))
FROM (SELECT '2-277395900-2' AS columnaam ) temp
[/SQL]

Voor je derde:
[SQL]SELECT SUBSTRING_INDEX(column_name, '-', -1)[/SQL]
of met spatie:
[SQL]SELECT SUBSTRING_INDEX(column_name, ' ', -1)[/SQL]
 
Suggesties van mastermindzh gaan niet werken, deze betreffen namelijk MySQL....

Tardis
 
Oh :) klopt dat is mysql...

Access heeft alleen mid, left & right.

Je zou een module kunnen maken voor acces

http://stackoverflow.com/questions/...nt-to-the-substring-function-in-ms-access-sql

Of probeer het met left right & mid.

Hier gaat het dan (mijn access is een beetje roestig :P)
voor left (1 en 3) gok ik op zoits:
[SQL]left(txt, inStr(txt, "-" + 1[/SQL]

voor 2 dan op zoits:

[SQL]Mid(txt, InStr(txt, "-") + 1, InStr(txt, "-") - InStr(txt, "-") - 1)[/SQL]
 
Laatst bewerkt:
Beste Mastermindzh'

Hellaas werken deze niet geeft foutmelding met haakjes en ID enz.

Heb een aantal dingen aangepast maar fout melding blijft
 
Dan kan ik je helaas niet verder helpen, aangezien ik al een langere tijd niet meer met acces - sql werk (sql server van windows wel).

Mijn excuses :)

PS: ik had ook beter moeten lezen voordat ik reageerde xD, ik nam gelijk aan dat acces engels voor toegang was haha.
 
Voeg de volgende velden aan je query toe in ontwerpweergave

Code: Trim(Mid(kolomnaam;1;InStr(kolomnaam;"-")-1))
Pallet: Trim(Mid(kolomnaam;InStr(kolomnaam;"-")+1;InStrRev(kolomnaam;"-")-InStr(kolomnaam;"-")-1))
Aantal: Trim(Mid(kolomnaam;InStrRev(kolomnaam;"-")+1))

Tardis
 
Was mijn acces sql tog niet zo roestig haha..

@tardis vanwaar mid voor de code en het aantal?, en niet left & right
 
Met Left en Right gaat dit sowieso niet lukken.
Lees de vraagstelling nog maar eens goed -> positie van de verbindingstekens varieert

Tardis
 
Je kan left hetzelfde gebruiken als MID, tenminste zo heb ik het vroeger gedaan. (weet dus niet of dit voor nieuwere versies nog werkt)

Left (column InStr(1,column,"-")-1)
 
Dat is onjuist.
Voor de rest, probeer je suggesties eens, ik gok dat je het niet voor elkaar gaat krijgen.

Tardis
 
Ik weet dat dat werkt in access 2000 (daar werkte ik vroeger mee).


Zoals ik al zei kan ik mijn opties niet proberen daar ik Microsoft access al lang niet meer gebruikt heb :P
Conclusie: left, right werken niet in versies > 2000? (of niet met de count van instr, om specifieker te zijn)?


[edit]Het is maar goed dat ik rete- eigenwijs ben :P, office 2010 heb ik gebruikt nu. Toch maar even snel een acces database gemaakt om de desbetreffende query's te kunnen testen.

Het werkt toch :D

Even de snelle uitleg, op deze manier neem je van een bepaalde text (de columntext) het linkse gedeelte voor het cijfer.
Dat cijfer kan je eruithalen met instr
[SQL]SELECT instr(1, Tabel1.voorbeeld, '-' )-1)
FROM Tabel1;
[/SQL]

De reden dat je -1 doet, is omdat hij het - er bij telt.

Vervolgens kan je dat nummer gebruiken in een left om het gewenste aantal characters te selecteren (dat weet je dankzij instr)

je volledig werkende acces-sql query wordt dan (voor hetgeen links voor het streepje):
[SQL]SELECT left(tabel1.voorbeeld, instr(1, Tabel1.voorbeeld, '-' )-1), Tabel1.Id
FROM Tabel1;
[/SQL]

en voor hetgeen rechts van het streepje:
[SQL]SELECT right(tabel1.voorbeeld, instr(1, Tabel1.voorbeeld, '-' )), Tabel1.Id
FROM Tabel1;
[/SQL]


[/edit]


@TS

Om toch substring te krijgen kan je alsnog de module invoeren, die heb ik nu getest en die werkt nog steeds prima

Wat je dan doet is:

Klik op "hulpmiddelen voor databases"
klik op visual basic
klik met de rechtermuisknop op je project aan de linkerkant
kies voor invoegen -> module

Plak deze code:

[CPP]Public Function Substring_Index(strWord As String, strDelim As String, intCount As Integer) As String

Substring_Index = delims

start = 0
test = ""

For i = 1 To intCount
oldstart = start + 1
start = InStr(oldstart, strWord, strDelim)
Substring_Index = Mid(strWord, oldstart, start - oldstart)
Next i

End Function[/CPP]

Sla deze module op met de naam hoe jij het wilt (ik had gewoon module1).

Nu heb je gewoon de substring_index in microsoft acces

deze roep je dan zo aan: [SQL]SELECT Substring_Index([voorbeeld],"-",1) FROM tabel1
[/SQL]


[edit]voor de geintresseerde: de database met module [/edit]
 
Laatst bewerkt:
Zie mijn edit in het vorige bericht, het kan wel degelijk

je kan met instr het aantal bepalen van de karakters VOOR het streepje, dat kan je vervolgens gebruiken in je LEFT.

Daardoor wordt het dus dynamisch en kan je zoveel als je wilt voor het streepje plaatsen.

De functie lost het probleem ook op, aangezien deze ook het aantal telt VOOR het streepje en dat dan gebruikt.

Hier de database waar je mee kunt werken (met left & right werkend + de module, is alleen geen query van): http://www.mediafire.com/?o0z8mpugg9gd9zd

[edit]Om de module te testen in bovenstaande(downloadbare) database kan je de volgende query gebruiken:

[sql]SELECT Substring_Index([voorbeeld],"-",1) FROM tabel1
[/sql][/edit]
 
Laatst bewerkt:
@mastermindzh: Waarom zou je een overbodige en niet fraaie nette functie gebruiken als je het met een simpele query formule al kunt oplossen? Bovendien haalt jouw functie alleen het linkerdeel uit de zoekstring, en daar schiet je weinig mee op.
De oplossing van Tardis is op zich prima, al gaat hij er wel vanuit dat er minstens twee - tekens in de zoektekst zitten. En TS heeft het er in zijn oorspronkelijke vraag over dat er behalve het - ook spaties als scheiding gebruikt worden. Dat werpt dan de vraag op of hij de volgende varianten bedoelt: " ", "-", "- ", en " -". En dan heb je natuurlijk een heel ander probleem.
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan