Kan iemand mij zeggen wat de precieze syntax moet zijn van het volgende probleem:
Ik wil een query maken in BASE (met een HSQL-engine dus) die het volgende doet:
Geef mij alle woorden die de volgende letters bevatten:
en dan een rijtje letters (parameters).
Echter: bij de zoektocht moet hij geen onderscheid maken tussen hoofdletters en kleine letters, hij moet dus zowel hoofd- als kleine letters vinden:
Ik dacht dat het iets was van:
LIKE '%' || :let1 || '%' etc, maar dat werkt niet, wie heeft voor mij de goede syntax?
met dank PT
[opgelost]syntax hoofdlettergevoeligheid
[opgelost]syntax hoofdlettergevoeligheid
Laatst gewijzigd door peetieq2 op za sep 05, 2009 11:55 pm, 1 keer totaal gewijzigd.
open office 3.1 en windows vista
Re: syntax hoofdlettergevoeligheid
Kan je hier iets mee ? :
http://user.services.openoffice.org/en/ ... 644#p89387
http://user.services.openoffice.org/en/ ... 644#p89387
LibreOffice 3.5.4.2
op Ubuntu Linux 12.04 LTS
op Ubuntu Linux 12.04 LTS
Re: syntax hoofdlettergevoeligheid
Probeer eens Dit lost je hoofd/kleine letter probleem op. Maar als ik je goed begrijp dan wil je ook nog zoeken op meerdere letters tegelijk en dan elke keer een andere hoeveelheid letters. Je kunt met verschillende parameters werken en dan iets doen als maar dan krijg je alles als je bv voor :let2 niets invult omdat dan de LIKE vergelijking '%%' wordt. Dit zou je weer kunnen ondervangen met de truuk om parameter :let2 te combineren met :let1 en daarvan weer de eerste letter te nemen: De laatste stap is om het gemak te dienen en maar 1 parameter te gebruiken voor het zoeken op een aantal letters. Het maximale aantal letters bepaal je door je query: Voor de eerste LIKE gebruik ik COALESCE om er voor te zorgen dat als je niets op geeft je alles krijgt. SUBSTRING() geeft een NULL waarde als je buiten de grenzen van een string zoekt, dus dan is het resultaat van '%' || NULL || '%' ook NULL en het resultaat van UPPPER() ook en levert de LIKE niets op. Precies wat we nodig hebben voor de 2-de, 3-de, ... letter.
Code: Selecteer alles
.... WHERE UPPER(<field>) LIKE UPPER( '%' || :let1 || '%')Code: Selecteer alles
... WHERE UPPER(<field>) LIKE UPPER( '%' || :let1 || '%')
OR UPPER(<field>) LIKE UPPER( '%' || :let2 || '%')Code: Selecteer alles
... WHERE UPPER(<field>) LIKE UPPER( '%' || :let1 || '%')
OR UPPER(<field>) LIKE UPPER( '%' || SUBSTRING(CONCAT(:let2, :let1),1,1) || '%')Code: Selecteer alles
... WHERE UPPER(<field>) LIKE UPPER( '%' || COALESCE(SUBSTRING(:Letters,1,1),'') || '%')
OR UPPER(<field>) LIKE UPPER( '%' || SUBSTRING(:Letters,2,1) || '%')
OR UPPER(<field>) LIKE UPPER( '%' || SUBSTRING(:Letters,3,1) || '%')
OR ...W11 21H2 (build 22000), LO 7.4.1.2(x64)
Het is Microsoft marketing die laat geloven dat computers geschikt zijn voor niet technici
Het is Microsoft marketing die laat geloven dat computers geschikt zijn voor niet technici
Re: syntax hoofdlettergevoeligheid
Ik heb een heel eenvoudige oplossing gevonden voor mijn probleem:
Je kunt in plaats van tekentype VARCHAR ook voor VARCHAR_IGNORECASE kiezen. Dit heeft als grote voordeel dat je er bij je query geen rekening meer mee hoeft te houden.
De volledige syntax werd:
SELECT "Lengte", "Veld1" FROM "lijst" AS "lijst" WHERE ( "Lengte" > 6 AND "Veld1" LIKE '%' || :let1 || '%' AND "Veld1" LIKE '%' || :let2 || '%' AND "Veld1" LIKE '%' || :let3 || '%' AND "Veld1" LIKE '%' || :let4 || '%' AND "Veld1" LIKE '%' || :let5 || '%' AND "Veld1" LIKE '%' || :let6 || '%' AND "Veld1" LIKE '%' || :let7 || '%' OR "Veld1" = NULL ) ORDER BY "Lengte" ASC, "Veld1" ASC
Bedankt voor het meedenken
PT
Je kunt in plaats van tekentype VARCHAR ook voor VARCHAR_IGNORECASE kiezen. Dit heeft als grote voordeel dat je er bij je query geen rekening meer mee hoeft te houden.
De volledige syntax werd:
SELECT "Lengte", "Veld1" FROM "lijst" AS "lijst" WHERE ( "Lengte" > 6 AND "Veld1" LIKE '%' || :let1 || '%' AND "Veld1" LIKE '%' || :let2 || '%' AND "Veld1" LIKE '%' || :let3 || '%' AND "Veld1" LIKE '%' || :let4 || '%' AND "Veld1" LIKE '%' || :let5 || '%' AND "Veld1" LIKE '%' || :let6 || '%' AND "Veld1" LIKE '%' || :let7 || '%' OR "Veld1" = NULL ) ORDER BY "Lengte" ASC, "Veld1" ASC
Bedankt voor het meedenken
PT
open office 3.1 en windows vista
Re: [opgelost]syntax hoofdlettergevoeligheid
VARCHAR_IGNORECASE is ook een oplossing (Ik zie dat ik je vraag mbt dee zoektermen verkeerd heb gelezen).
Een opmerking over je oplossing:
- Op deze manier kun je alleen woorden met 7 zoek-letters vinden. Als je op zoek bent naar een woord met 'ee', 'aa' en je geeft als letters een 'a' en nog een 'a' op dan vind toch ook woorden met 'a'. Dat kun je m.i. alleen oplossen door de woorden te coderen en als letter 'aa', 'ee' toe te staan.
- Wat is de betekenis van Veld1 = NULL? Dit moet zijn Veld1 IS NULL, maar kan dat dan?
Een generalisatie op je vraag met een minimale woord lengte argument en als functie van het aantal zoekletters, en het aantal zoekletters in één string tot een maximum van 7 zou kunnen zijn:
De vgl (LENGHT(:letters) < 7 OR ... ) zorgt er voor dat je ook met minder dan 7 letters kunt zoeken.
Succes.
Een opmerking over je oplossing:
- Op deze manier kun je alleen woorden met 7 zoek-letters vinden. Als je op zoek bent naar een woord met 'ee', 'aa' en je geeft als letters een 'a' en nog een 'a' op dan vind toch ook woorden met 'a'. Dat kun je m.i. alleen oplossen door de woorden te coderen en als letter 'aa', 'ee' toe te staan.
- Wat is de betekenis van Veld1 = NULL? Dit moet zijn Veld1 IS NULL, maar kan dat dan?
Een generalisatie op je vraag met een minimale woord lengte argument en als functie van het aantal zoekletters, en het aantal zoekletters in één string tot een maximum van 7 zou kunnen zijn:
Code: Selecteer alles
WHERE LENGTH("Veld1") >= LENGTH(:letters) AND LENGTH("Veld1") >=(:min_woord_lengte)
AND "Veld1" like '%' || SUBSTRING(:letters,1,1)|| '%'
AND ( LENGTH(:letters) < 2 OR "Veld1" like '%' || SUBSTRING(:letters,2,1)|| '%' )
AND ( LENGTH(:letters) < 3 OR "Veld1" like '%' || SUBSTRING(:letters,3,1)|| '%' )
AND ( LENGTH(:letters) < 4 OR "Veld1" like '%' || SUBSTRING(:letters,4,1)|| '%' )
.....
AND ( LENGTH(:letters) < 7 OR "Veld1" like '%' || SUBSTRING(:letters,7,1)|| '%' )
Succes.
W11 21H2 (build 22000), LO 7.4.1.2(x64)
Het is Microsoft marketing die laat geloven dat computers geschikt zijn voor niet technici
Het is Microsoft marketing die laat geloven dat computers geschikt zijn voor niet technici