MainframeSupports
tip uge 19/2004:

Blanke i SQL anvendes udelukkende i tegnstrenge, og som du sandsynligvis har konstateret, så bliver efterstillede blanke ignoreret, når DB2 sammenligner to tegnstrenge med hinanden. Nogen gange kan dette faktum fejlagtigt få mange til at tro, at efterstillede blanke i VARCHAR kolonner fjernes af DB2, men det gør de ikke. Nu er fakta ikke altid, hvad de giver sig ud for og det gælder også for efterstillede blanke i DB2.

Hvad vil du for eksempel gøre, hvis nu du i SQL kun vil have at to tegnstrenge er ens, hvis de ud over indholdet også er præcis lige lange. Det kan du opnå ved at benytte LIKE. Eksempelvis er SPACE(5) LIKE SPACE(4) falsk. Det kedelige ved LIKE er, at udtrykket efter LIKE ikke kan være en kolonne, og hvad hvis nu udtrykket efter LIKE indeholder % eller _, ja så virker det lige pludselig heller ikke efter hensigten.

I løbet af de senere år er det blevet populært med større datastrukturer og derfor forekommer der oftere VARCHAR kolonner med en længde på mere end 255 tegn i vores DB2-tabeller. Der er også kommet diverse LOB datatyper til, som typisk er meget længere end 255 tegn. Det pudsige er, at når man sammenligner en tegnstreng på mere end 255 tegn med noget andet, så får man en SQL-fejl kaldet -134. DB2 kan simpelthen ikke finde ud af at sammenligne med tegnstrenge på mere end 255 tegn. Heldigvis kan LIKE redde situationen, idet LIKE kan klare op til 4095 tegn, med samme begrænsninger som tidligere nævnt.

En hyppigt forekommende situation er, at man vil konstatere om en kolonne indeholder lutter blanke. Det klares nemt for kolonner med en længde på 255 tegn eller derunder med en COLUMN = '', men hvad nu med kolonner på mere end 255 tegn. Her kan du benytte sammenligningen RTRIM(COLUMN) LIKE '', som giver det rigtige resultat. Læg mærke til at COLUMN LIKE '' ikke giver det forventede resultat, hvis der har sneget sig blanke ind i COLUMN.

Forrige danske tip        Last tip in english        Tip oversigten