Hoofdletterongevoelige SQL SELECT
query FAQ: Hoe kan ik SQL SELECT
query’s uitvoeren en daarbij hoofd- en kleine letters negeren?
Achtergrond
Toen ik voor het eerst SQL query’s ging schrijven, gebruikte ik Postgresql, en gebruikte ik enkele van hun aangepaste reguliere expressiemogelijkheden om hoofdletterongevoelige query’s uit te voeren. Dat leek een goed idee op dat moment, maar toen ik mijn applicatie probeerde te verhuizen naar een MySQL database, werkte een deel van mijn applicatie niet meer. Na wat debuggen herinnerde ik me dat ik Postgreql-specifieke query-mogelijkheden had gebruikt, dus moest ik dat deel van de code herschrijven om met MySQL te werken.
Om je wat van dat verdriet te besparen, laten de volgende voorbeelden zien hoe je hoofdletter-ongevoelige SQL SELECT queries kunt schrijven met gebruik van de standaard SQL syntaxis. De getoonde queries zouden moeten werken met de meeste, zo niet alle, SQL 92-compatibele databases.
Een zeer belangrijk voorbehoud
Let op dat er één ZEER BELANGRIJK ding te zeggen is over de getoonde aanpak:
Deze queries dwingen uw database om een tabel scan uit te voeren. Dit betekent dat als je een index hebt op de kolom die je doorzoekt, die index niet wordt gebruikt. Dus als je een miljard records in je tabel hebt, zal deze aanpak de database dwingen om naar alle een miljard records te kijken.
Ik plaats geen commentaren van mensen die denigrerende taal gebruiken, maar zoals iemand in de commentaren schreef (tussen de beledigingen door), “het gebruik van een functie om een hele kolom met gegevens om te zetten vereist een tabel scan en moet worden vermeden in een
WHERE
clausule.”
Hoofdletterongevoelige SQL SELECT: Gebruik bovenste of onderste functies
De SQL-standaardmanier om hoofdletterongevoelige query’s uit te voeren is het gebruik van de SQL upper
of lower
functies, zoals deze:
select * from users where upper(first_name) = 'FRED';
of deze:
select * from users where lower(first_name) = 'fred';
Zoals je kunt zien, is het patroon om het veld waarin je zoekt in hoofdletters of kleine letters te zetten, en dan je zoekstring ook in hoofdletters of kleine letters te zetten om overeen te komen met de SQL functie die je hebt gebruikt. Dit werkt met alle SQL databases die ik heb gebruikt, inclusief Postgresql, MySQL, en SQL Server.
SQL LIKE queries
Je kunt dezelfde techniek gebruiken om je SQL LIKE
queries ook case insensitive te maken. Hier ziet u hoe u de hoofdletterfunctie gebruikt met een SQL LIKE
query:
select * from users where upper(first_name) like '%AL%';
en hier ziet u dezelfde hoofdletterongevoelige SQL LIKE
query met behulp van de SQL lowercase
functie:
select * from users where lower(first_name) like '%al%';
Samenvatting
Ik hoop dat deze case insensitive SQL SELECT query voorbeelden nuttig zijn. Nogmaals, de truc is om wat je zoekt om te zetten naar hoofdletters of kleine letters met behulp van de SQL-functies voor hoofdletters en kleine letters, en dan je zoekstring te laten overeenkomen met dat hoofdlettergebruik.