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