
Ved Renden 31 2870 Dyssegaard Tel. +45 23 34 54 43
| 
MainframeSupports tip uge 11/2010:
SQL LIKE er en fremragende funktion til wildcard søgning. Desværre giver den visse
udfordringer, hvis LIKE udtrykket ikke indeholder noget wildcard tegn og kolonnen, der
skal søges i er en CHAR kolonne. Heldigvis findes der en ret fiks løsning.
Antag at tabel PERSON indeholder en kolonne kaldet FIRSTNAME erklæret som CHAR(20).
I dit program har du lavet et SQL-kald, der bruges til at finde fornavne ud fra et
wildcard:
SELECT FIRSTNAME, MIDDLENAME, LASTNAME
FROM PERSON
WHERE FIRSTNAME LIKE :firstNameFilter
variablen firstNameFilter skal du erklære, som det der svarer til en VARCHAR(20)
kolonne. Når du udfylder den skal du sørge for, at fjerne efterstillede blanke. Hvis
det sidste tegn i firstNameFilter er et %-tegn, så virker ovenstående SQL-kald fint.
Desværre virker det knap så fint i alle andre tilfælde med mindre fornavnet er
20 tegn langt, og dem er der jo ikke så mange af. Problemet er de efterstillede blanke
i kolonnen FIRSTNAME. Det kan heldigvis nemt kureres således:
SELECT FIRSTNAME, MIDDLENAME, LASTNAME
FROM PERSON
WHERE STRIP(FIRSTNAME,T) LIKE :firstNameFilter
Nu vil wildcard-søgningen virke korrekt uanset hvilken værdi, firstNameFilter tildeles.
Siden DB2 version 8 er det også så heldigt, at DB2 vil udnytte et eventuelt index på
FIRSTNAME, også selv om FIRSTNAME er blevet omgivet af en funktion.
Forrige danske tip
Last tip in english
Tip oversigten
|