Speciale karakters zoeken in SQL Server

29-04-2012 | Marcel van Langen | SQL Server | bracket, percentage, underscore, zoeken, like

Ik werk inmiddels meer dan 15 jaar in de ICT. Toch had ik in al die jaren nog nooit hoeven zoeken op een procent teken in SQL server. Tot vandaag. En dan blijkt dat problemen op te leveren, omdat het procent teken een speciaal karakter is in SQL Server. Overigens net als de underscore en de bracket. Tijd om even kort uit te leggen hoe je dit kunt oplossen!

Speciale of gereserveerde karakters heb je in vrijwel iedere omgeving. Deze karakters hebben een speciale betekenis. Denk bijvoorbeeld aan het vraagteken in een URL of de dubbele quote in ColdFusion. En ook SQL Server kent dergelijke speciale karakters. De meest bekende zijn het procent teken, de underscore en de bracket. Deze hebben de volgende betekenis:

  • % alternatief voor een willekeurig aantal karakters. Stel dat je een postcode tabel hebt, en je wilt het aantal unieke postcodes weten dat begint met het getal 13. In dat geval zul je de volgende query nodig hebben: SELECT COUNT(*) FROM tbl_postcode WHERE postcode LIKE '13%'
  • _ alternatief voor een willekeurig enkel karakter. Dit zul je waarschijnlijk (vrijwel) nooit gebruiken, maar je weet maar nooit! Stel je zoekt alle woorden van 3 letters die eindigen op LA. Dus bijvoorbeeld SLA en BLA. In dat geval kun je de volgende query gebruiken: SELECT woord FROM tbl_worden WHERE woord LIKE '_LA'
  • [ biedt de mogelijkheid om namen te delimiteren. Stel dat iemand het in zijn hoofd heeft gehaald om een kolom in een tabel TABLE te noemen. Hoewel TABLE een gereserveerd woord is, kun je toch de kolom aanspreken door brackets te gebruiken: SELECT [table] FROM tbl_furniture.

Maar wat nu als je moet zoeken op een speciaal karakter. Je wilt met andere woorden weten welke records een procent teken bevatten. De volgende query gaat niet werken:

SELECT column_name FROM table WHERE coloumn_name LIKE '%%%'

Je zult SQL Server moeten laten weten dat het middelste procent teken letterlijk moet worden genomen en niet moet worden behandeld als een speciaal karakter. Dit doe je door de bracket in te zetten. De volgende query levert dan ook het gewenste resultaat:

SELECT column_name FROM table WHERE column_name LIKE '%[%]%'

Goed opletten geblazen dus, zeker als je dit programmatisch moet gaan afvangen! Eigenlijk geldt precies hetzelfde voor het zoeken op de underscore en de bracket. Ook in dat geval zul je de brackets moeten inzetten om duidelijk te maken dat het hier om een teken gaat die SQL Server letterlijk moet nemen. De volgende code gaat dus NIET werken:

SELECT column_name FROM table WHERE column_name LIKE '%_%';
SELECT column_name FROM table WHERE column_name LIKE '%[hallo]%';

Deze code geeft overigens geen fout. De resultaten zullen alleen niet zijn wat je verwacht. Beide queries zullen je de complete tabel opleveren. Vervang deze code door onderstaande code om de gewenste resultaten te krijgen:

SELECT column_name FROM table WHERE column_name LIKE '%[_]%';
SELECT column_name FROM table WHERE column_name LIKE '%[[]hallo]%';

Let op hoe alleen de opening bracket wordt voorzien van extra brackets. Succes!

Over Morloff

Morloff ontwerpt en realiseert succesvolle webtoepassingen op het gebied van procesoptimalisatie, eCommerce en rapportage door de inzet van moderne webtechnieken, sociale media en zoekmachine optimalisatie.

over ons | diensten | portfolio | contact | route

naar website IJsmonster.nl naar website ICT intermediairs naar website marcelvanlangen.com

Twitter

Morloff

Cuneraweg 169a
3911 RH Rhenen

M +31 (0)6 - 515 96 189
W www.morloff.nl
E contactformulier

Morloff op Twitter Morloff op Facebook Morloff op LinkedIn Morloff via RSS