Hello
Ik heb dit weekend nog wat meer gestudeerd op wat mogelijk is met een database gebaseerd op een spreadsheet. Natuurlijk biedt dit niet zoveel mogelijkheden maar bij een goed gebruik kan er toch wat mee gedaan worden. In een eerdere post heb ik een query getoond die ik gebruik in een HSQLDB database.
Nu heb ik twee queries als voorbeelden voor een database gebaseerd op een spreadsheet. Ik heb dit uitgetest op een lijst van 900 namen en het resultaat is snel genoeg.
Mijn inziens is een query overzichtelijker dan een functie in een spreadsheet. Ook kan er commentaar bijgezet worden. Dit maakt het beter te begrijpen als er na enige tijd op nieuw nagekeken moet worden. Het commentaar blijft alleen staan als er in Native mode gewerkt wordt.
In native mode kan er gemakkelijk met delen geplakt en of geknipt worden.
Tweede minder goede query
Code: Selecteer alles
SELECT
-- Compositie van de naam met titels en nog meer zaken
ltrim(rtrim(replace(concat(
insert("Titel",length("Titel")+1,1 ,' '),
insert("schr_vnaam",length("schr_vnaam")+1,1,' '),
insert("schr_vnaam",length("schr_vnaam")+1,1,' '),
insert("tussen",length("tussen")+1,1,' '),
insert("schr_naamvol",length("schr_naamvol")+1,1,' '),
insert("achter",length("achter")+1,1,'')
),' ',' '))) as "Naam",
"NAAMID"
FROM "Namen"
Het nadeel van deze query is dat indien er drie spatie op een rij staan deze niet verminderd worden tot 1.
Derde betere query
Code: Selecteer alles
SELECT
-- Compositie van de naam met titels en nog meer zaken
concat(
insert(concat("Titel",' '),0,0 ,''),
insert(concat("schr_vnaam",' '),0,0 ,''),
insert(concat("schr_vnaam",' '),0,0 ,''),
insert(concat("tussen",' '),0,0 ,''),
insert(concat("schr_naamvol",' '),0,0 ,''),
insert("achter",0,0 ,'')
) as "Naam",
"NAAMID"
FROM "Namen" where "NAAMID" IN ( 3 )
Beiden queries zijn gebaseerd op de eerste in een vorige post. Ik denk dat de derde query beter is dan de tweede Het doel is dat de volledigenaam wordt weergegeven zonder overbodige spaties. De verklaring die nu volgt is van binnen uit.
concat("Titel",' ')
Hier in wordt de titel samengevoegd met een spatie. Indien het een NULL-waarde is dan is het resultaat ook NULL.
insert(concat("Titel",' '),0,0 ,'')
Er wordt een lege string toegevoegd aan het vorige resultaat. Als het een NULL waarde is dan krijg ik een lege string anders de waarde van de varibele "Titel" met een spatie. Dit idee wordt toegepast op alle overige waarden met uitzondering van de laatste want daar hoeft geen spatie te komen.
Concat(
Deze functie staat om alle delen die nu tenminste een lege string maken. Het resultaat is dat de namen gescheiden zijn door spaties.
Aanhalingstekens
Voor de duidelijk heid variablen worden omgegeven door dubbele aanhalings tekens. letterlijke waardes worden omgegeven door enkele aanhalings tekens. Dit maakt dat een lege string met twee enkele aanhalingsteken erg veel lijkt op een dubbel aanhallingsteken. Merk dat verschil goed op.
Legestring : ''
Dubbelaanhalingsteken : "
Ik hoop dan de uitleg niet alleen van belang is voor de oorspronkelijke vragen steller maar het is ook bedoeld voor andere lezers die met een zelfde soort probleem kampen.
Romke