- ASCII('string') : retourneert de ASCII waarde (American Standard Code for Information Interchange) van het eerste teken van de string.
SELECT ASCII(tekst_titel) AS ascii_titel
FROM f_teksten ;
Bovenstaande SQL query levert de ASCII waarde op van de eerste letters van de titels uit de tabel:
| ascii_titel |
| 81 |
| 87 |
| 77 |
| 67 |
| 115 |
| 116 |
| 77 |
| 65 |
| 69 |
| 115 |
Een tabel van ASCII waarden kun je vinden op http://www.ascii.nl/
.
- BIN(x) : retourneert de waarde van x als binaire string.
SELECT tekst_id, BIN(tekst_id) AS bin_id
FROM f_teksten ;
Geeft als resultaat :
| tekst_id |
bin_id |
| 1 |
1 |
| 2 |
10 |
| 3 |
11 |
| 4 |
100 |
| 5 |
101 |
| 6 |
110 |
| 7 |
111 |
| 8 |
1000 |
| 9 |
1001 |
| 10 |
1010 |
De reden waarom deze functie bij de string functies staat op de website is mij niet helemaal duidelijk. Het enige dat ik zou kunnen verzinnen is dat de waarde die deze SQL query oplevert geen integer is, maar een string. Meer info over deze functie kun je vinden op www.mysql.com
.
- BIT_LENGTH('string') : Retourneert de lengte van de string, maar dan in bits. Zo geeft de SQL query :
SELECT BIT_LENGTH(tekst_titel) AS bl_titel
FROM f_teksten ;
dit restultaat :
| bl_titel |
| 296 |
| 232 |
| 232 |
| 288 |
| 192 |
| 160 |
| 176 |
| 160 |
| 152 |
| 176 |
Deze functie werkt vanaf versie 4.0.2
- CHAR(x1,x2,x3,...) : Deze functie interpreteert de argumenten als ASCII tekens en genereert een string op basis van de ASCII waarden van de argumenten. Onderstaande SQL query's verduidelijken een en ander:
SELECT CHAR(100) ;
Geeft als resultaat : d
SELECT CHAR(83,81,76) ;
Geeft als resultaat : SQL
- CHAR_LENGTH(string) : zie de uitleg bij de functie OCTET_LENGTH()
.
- CHARACTER_LENGTH(string) : synoniem van de functie CHAR_LENGTH()
.
- CONCAT() : Met CONCAT() kun je kolommen en stringen samenvoegen tot één string.
SELECT CONCAT(tekst_titel," ",tekst_bericht) AS new_string
FROM f_teksten
Geeft als restultaat :
| new_string |
| Query bepalen volgende week donderdag Vraagstelling over een ´query´ die een bepaalde donderdag moet filteren |
| Willekeurig selecteren in SQL Heel verhaal dat beantwoord wordt met de functie RAND |
| MySQL ondersteuning bij PHP 5 Documentatie te vinden op php.net |
| CASE statement binnen CASE statement Geavancerde SQL statements die leuk en nuttig zijn, maar ook veel problemen kunnen opleveren. |
| select between op datums Eenvoudig op te lossen met een query |
| twee tabellen joinen Wordt in een andere tut besproken |
| MySQL snelheid met ASP MySQL en ASP, goede combi of niet? |
| Alter table met fout hoop letters en cijfers |
| Error in SQL syntax Antwoord : gebruik de SQL tester |
| subquery in een insert wat wil je met deze SQL SQL query bereiken? |
We gebruiken drie argumenten in bovenstaand voorbeeld. Het eerste argument is de kolom tekst_titel. Het tweede argument is een string die bestaat uit een spatie. Het derde argument is de kolom tekst_bericht. Deze 3 argumenten worden samengevoegd waardoor er, per rij, een string wordt geretourneert die bestaat uit de tekst_titel spatie tekst_bericht. Een wat simpeler voorbeeld :
SELECT CONCAT('hallo',',','allemaal') AS string
FROM f_teksten
Geeft als resultaat : hallo,allemaal
- CONCAT_WS(scheidingsteken,argument1,argument2,etc.) : Deze functie werkt hetzelfde als CONCAT()
, alleen kun je bij CONCAT_WS() een scheidingsteken toevoegen als eerste argument. De letters WS staan voor With Seperator: met scheidingsteken.
SELECT tekst_id, CONCAT_WS(':',tekst_id,tekst_titel,tekst_auteur) AS c_ws
FROM f_teksten ;
Geeft als resultaat:
| tekst_id |
c_ws |
| 1 |
1:Query bepalen volgende week donderdag:2 |
| 2 |
2:Willekeurig selecteren in SQL:1 |
| 3 |
3:MySQL ondersteuning bij PHP 5:2 |
| 4 |
4:CASE statement binnen CASE statement:3 |
| 5 |
5:select between op datums:6 |
| 6 |
6:twee tabellen joinen:5 |
| 7 |
7:MySQL snelheid met ASP:5 |
| 8 |
8:Alter table met fout:1 |
| 9 |
9:Error in SQL syntax:1 |
| 10 |
10:subquery in een insert:2 |
In dit voorbeeld worden de 3 kolommen uit de tabel berichten weergegeven als een 1 string waarbij de afzonderlijke kolommen gescheiden worden door een dubbele punt.
Een eenvoudiger voorbeeld waarbij losse argumenten gebruikt worden:
SELECT CONCAT_WS(',','pietje','puk','leert','sql') AS c_ws ;
Resulteert in de string: pietje,puk,leert,sql
Als scheidingsteken wordt een komma gebruikt als eerste argument. Deze komma scheidt dus de volgende argumenten in de functie.
- ELT(x,arg1,arg2,arg3,etc) : retourneert het x-de argument op uit de opsomming van strings.
Ook dit kan het beste uitgelegd worden met wat voorbeelden. In onderstaand voorbeeld hebben we de stringen: 'ik', 'wil', 'sql', 'leren'.
Vervolgens willen we uit deze stringen de 2e string selecteren. Hiervoor gebruiken we de functie ELT() waarbij we als eerste argument opgeven welke string we willen hebben uit de volgende argumenten. Oftewel:
SELECT ELT(2,'ik', 'wil', 'sql', 'leren') AS string2 ;
Deze SQL query geeft als resultaat de string : wil
'wil' is nl. de 2e string uit de opsomming van argumenten. Het eerste argument van de functie ELT(), 2 in ons voorbeeld geeft dus aan dat we de 2e string van de argumenten willen hebben. De functie ELT() retourneert NULL wanneer als de x-de string niet bestaat of als die string NULL is.
- EXPORT_SET(te splitsen item, aanteken, uitteken, scheidingsteken, bitlengte) : Deze functie vereist wat meer uitleg. De nut van deze functie ontgaat mij totaal, maar ik zal toch een poging wagen om de functionaliteit van deze functie uit te leggen. Bij deze functie zijn de eerste drie argumenten verplicht. De laatste twee zijn optioneel. Deze functie retourneert een omgekeerde string. Deze string is het resultaat van het 'te splitsen item', gesplits in de bits 'aanteken' en 'uitteken'. Het scheidingsteken is standaard een komma en de bitlengte is standaard 64.
Bovenstaande uitleg is niet te begrijpen zonder voorbeeld, en zelfs met voorbeeld zal de functie onbegrijpelijk blijven.
Als we het binaire resultaat van het getal 6 nemen via de SQL query :
SELECT BIN(6) ;
Krijgen we het resultaat : 110
We gaan nu het getal 6 via de functie EXPORT_SET() uitlezen waarbij we als 'aanteken' 1 gebruiken, als 'uitteken' 0, het scheidingsteken laten we leeg en de bitlengte maken we 3. We krijgen dan de SQL query :
SELECT BIN(6) AS b, EXPORT_SET(6, 1, 0, "", 3) AS e ;
Dit levert onderstaand resultaat op :
Het resultaat van de EXPORT_SET() van het getal 6 met de opgegeven waarde is 011, dat is hetzelfde als de binaire string van 6 achterstevoren. De functie EXPORT_SET() retourneert namelijk de string achterstevoren (omgekeerde string). De functie leest de bitwaarden van 6 uit van rechts naar links. Als scheidingsteken hebben we niets opgegeven. Hij leest de bitwaarden uit, aan elkaar waarbij 1 de waarde representeert van een geldige bitwaarde en de 0 van een ongeldige. De stringlengte is 3 (laatste argument)
Wellicht dat ik in de toekomst wat meer uitleg over deze functie, tot die tijd moeten jullie het met deze uitleg doen.
- FIELD('te zoeken string', 'string1', 'string2', 'string3', etc.) : Retourneert de eerste positie van de opgegeven 'te zoeken string' in de overige argumenten.
Zo geeft de SQL query :
SELECT FIELD('pietje', 'ik', 'ga', 'van', 'pietje', 'sql', 'leren') ;
Als resultaat : 4
Het eerste argument is de string die gezocht moet worden in de overige strings, 'pietje'. Als 4e resultaat (van de overige argumenten, dus de eerste niet meetellen) komt hij weer 'pietje' tegen en retourneert die positie.
- FIND_IN_SET('zoekstring', 'stringlijst') : zoekt de 'zoekstring' in de 'stringlijst' en geeft de positie terug. Deze stringlijst is 1 lange string die meerdere substrings bevat, gescheiden door een komma. Een set van substring dus. De zoekstring zoekt een substring die overeenkomt met de zoekstring in de stringlijst. Stel we hebben de stringlijst :
'Deze,SQL,tutorial,bevat,veel,functies'
We gaan in deze stringlijst het woord 'bevat' zoeken en de SQL query geeft de positie van het woord 'bevat' terug. We krijgen dan de SQL query :
SELECT FIND_IN_SET('bevat', 'Deze,SQL,tutorial,bevat,veel,functies') ;
Als resultaat geeft deze SQL query : 4
Het woord 'bevat' is namelijk de vierde substring in de stringlijst.
- FORMAT(getal,decimalen) : deze functie geeft het getal (1e arg.) terug in Amerikaans formaat met het aantal decimalen zoals opgegeven als in het 2e argument. Het resultaat van deze SQL query is geen integer maar een string omdat er tekens in staan die niet bij een numeriek resultaat horen. We gaan het getal 5698563252256.7589456 omvormen tot een getal naar Amerikaans formaat op 2 decimalen. We krijgen dan de SQL query :
SELECT FORMAT(5698563252256.7589456, 2) ;
Dit geeft als resultaat : 5,698,563,252,256.76
Per duizendtal staat er een komma en de decimalen vallen na de punt. Dit is dus precies andersom in vergelijking met de Europese manier van noteren. Hier noteren we het getal als : 5.698.563.252.256,76
- HEX(X) : Als X een getal is, dan geeft deze functie een string terug die de hexadecimale waarde van X. Als X een string is, dan geeft deze functie een string terug waarbij elk karakter uit de inputstring is omgezet naar z'n hexadecimale waarde.
SELECT HEX('a') ;
Retourneert : 61
SELECT HEX('z') ;
Retourneert : 7A
SELECT HEX('az') ;
Retourneert : 617A
Bij meerdere karakters worden de karakters stuk voor stuk omgezet naar hun hexadecimale waarde en vormen dus uiteindelijk een string waarbij die hexadecimale waarden achterelkaar staan. Zie ook de uitleg bij de functie UNHEX()
.
- INSERT('beginstring',startpositie,lengte,'vervangstring') : INSERT() is naast een commando ook een functie binnen MySQL. Je kunt dus wel stellen dat de naamgeving ongelukkig gekozen is, maar ja... wat doe je eraan. Deze functie biedt de mogelijkheid om de 'vervangstring' in de 'beginstring' te plaatsen waardoor er een nieuwe string ontstaat. Ook is het mogelijk om een deel uit de 'beginstring' te vervangen door de vervangstring.
SELECT INSERT('hopsakee',6,0,'SASASA') ;
Geeft als resultaat : hopsaSASASAkee
De beginstring 'hopsakee', krijg op de positie 6 een vervangstring, 'SASASA', die 0 posities van de beginstring moet vervangen.
SELECT INSERT('hopsakee',4,2,'SASASA') ;
Retourneert : hopSASASAkee
De beginstring 'hopsakee', krijgt een vervangstring 'SASASA', die op positie 4 begint en 2 posities van de beginstring vervangt. In dit geval wordt dus het gedeelte 'sa' uit de beginstring vervangen door 'SASASA'.
- INSTR('string', 'karakter') : Als je de eerste positie van een bepaalde karakter in een string wilt weten kun je de functie INSTR() gebruiken. In onderstaande SQL query gaan we de eerste positie van het karakter o bepalen in de kolom tekst_bericht. We krijgen dan de SQL query :
SELECT INSTR(tekst_bericht, 'o') AS positie
FROM f_teksten ;
| positie |
| 15 |
| 24 |
| 2 |
| 58 |
| 5 |
| 2 |
| 16 |
| 2 |
| 5 |
| 0 |
Bij de laatste rij wordt een 0 geretourneert omdat de o niet in die string voorkomt.
- LCASE() : synoniem van de functie LOWER()
.
- LEFT('string',x) : Deze functie retourneert een substring uit de 'string' die bestaat uit x aantal karakters, geteld vanaf de linkerkant van de string.
SELECT LEFT(tekst_titel,3) AS eerste3
FROM f_teksten ;
Geeft als resultaat :
| eerste3 |
| Que |
| Wil |
| MyS |
| CAS |
| sel |
| twe |
| MyS |
| Alt |
| Err |
| sub |
Zie ook de functie RIGHT()
- LENGTH('string') : synoniem van de functie OCTET_LENGTH()
.
- LOAD_FILE('bestandnaam') : biedt de mogelijkheid om de inhoud van een bestand weer te geven als string. Hier zijn wel een reeks van voorwaarden aan verbonden.
- Het bestand moet op de databaseserver staan;
- Het volledige pad moet gespecificeerd zijn in de 'bestandsnaam';
- Het bestand moet toegankelijk zijn, de desbetreffende map moet dus de juiste leesrechten hebben;
- Het bestand zelf moet ook leesbaar zijn;
- Het bestand moet kleiner zijn dan de serverinstelling : max_allowed_packet.
Als het bestand of het argument niet aan deze voorwaarden voldoet, of het bestand bestaat niet, dan retourneert deze functie NULL.
- LOCATE('zoekstring','string',positie) : retourneert de positie van de zoekstring in de string. Het derde argument bepaald vanaf welke positie gezocht moet worden in de string. Dit derde argument is niet verplicht. De functie geeft 0 terug als de substring niet gevonden kan worden in de string.
SELECT LOCATE('SQL', 'Deze SQL query is een voorbeeld van goed SQL gebruik') ;
Geeft als resultaat : 6
Dit resultaat is de positie, gerekend vanaf de linkerkant in de string. Als we vanaf een verdere positie willen bepalen wat de positie is waar het woord 'SQL' staat, dan zullen we het derde argument moeten gebruiken. We krijgen dan de SQL query :
SELECT LOCATE('SQL', 'Deze SQL query is een voorbeeld van goed SQL gebruik', 10) ;
Waarbij 10 gekozen is omdat de positie 10 achter de eerste SQL in de string is. Dit had dus ook positie 7 kunnen zijn, maar ook iedere andere positie tussen 6 en het resultaat van de tweede query. Als resultaat geeft deze SQL query : 42
- LOWER('string') : retourneert het resultaat in kleine letters.
SELECT LOWER('MySQL') ;
Geeft als resultaat : mysql
- LPAD('string','totale stringlengte','aanvullende karakters') : Deze functie retourneert een string die zo lang is als bij de 'totale stringlengte' wordt opgegeven en waarbij de 'string' wordt aangevuld met de 'aanvullende karakters' aan de linkerkant van de 'totale string'. Deze omslachtige uitleg wordt hopelijk duidelijk na onderstaande voorbeelden :
SELECT LPAD('hallo',10,'hi') AS string2 ;
Geeft als resultaat : hihihhallo
De totale lengte van de nieuwe string moet 10 worden (tweede arg.). De beginstring is 'hallo', wat dus inhoud dat er 5 karakters bij moeten. Deze 5 karakters zijn : 'hihih'. Deze 5 karakters (vermenigvuldiging van het derde argument) worden aan de linkerkant bijgeplaats omdat de functie LPAD() daar nou eenmaal voor is. Je hebt ook de functie RPAD(), maar die komt later in deze tut aan het bod. Kortom, deze functie vult de originele string aan de linkerkant aan met de karakters die als derde argument worden gebruikt, totdat de nieuwe string de lengte heeft bereikt die in het tweede argument is opgegeven.
- LTRIM('string') : retourneert de string zonder eventuele spaties aan de linkerkant van de string.
SELECT LTRIM(' SQL rocks! ') ;
Geeft als resultaat : 'SQL rocks! '
De spaties aan de linkerkant zijn dus verdwenen. Zie ook RTRIM()
en TRIM()
.
- MAKE_SET(bits, 'string1', 'string2', 'string3', 'string4', etc..) : MAKE_SET() vereist een uitgebreide uitleg omdat de functiewerking vrij gecompliceerd is. Ik zal m'n best doen om de werking ervan duidelijk te maken.
Het eerste argument moet een bit (getal) zijn. In gedachten (dus niet volgens de functie, maar ik zou niet weten hoe ik het anders uit moet leggen) wordt dit getal omgezet in de omgekeerde binaire string, zoals de functie EXPORT_SET()
laat zien in de gegeven voorbeelden. In het voorbeeld van de EXPORT_SET()
wordt het getal 6 omgezet naar de omgekeerder binaire string 011. Als we deze omgekeerde binaire string overeen laten komen met de volgende argumenten uit de MAKE_SET() functie en we nemen de waarden die overeenkomen met de 1 uit de omgekeerde binaire string, krijgen we een resultaat. De functie MAKE_SET() retourneert een set waarde. Dit is een string die bestaat uit substrings, gescheiden door een komma. We nemen de SQL query :
SELECT MAKE_SET(6,'hello','hello2','hello3','hello4') ;
Het eerste argument, de 6, heeft als omgekeerde binaire string 011, volgens de SQL query :
SELECT EXPORT_SET(6, 1, 0, "", 4) ;
Deze 011 gaan we respectievelijk vergelijken met de andere argumenten uit de eerste SQL query : 'hello','hello2','hello3','hello4' . Daarbij zien we dat de omgekeerde binaire string maar uit drie cijfers bestaat. Het vijfde argument, 'hello4' valt dus af. Daarnaast zien we dat het eerste getal een 0 (nul) is. Dit eerste getal komt overeen met het tweede argument 'hello'. Deze valt dan af. De overige cijfers zijn twee 1-en en komen respectievelijk overeen met 'hello2' en 'hello3'. Het resultaat van de eerste SQL query is dan ook : 'hello2,hello3' . Eén string, bestaat uit substringen, gescheiden door een komma is dus een set waarde.
Nog een voorbeeld :
SELECT EXPORT_SET(10, 1, 0, "", 4) AS es, MAKE_SET(10,'hello','hello2','hello3','hello4') AS ms ;
Geeft als resultaat :
Want 0101 komt overeen met de argumenten twee tot en met vijf uit de EXPORT_SET()
functie, waarbij het tweede argument en het vierde argument (de nullen) niet worden gebruikt. Alleen de argumenten die overeenkomen met de 1-en (het derde en het vijfde) worden geretourneerd.
Ik hoop dat deze functie een beetje duidelijk is. Wellicht dat ik hier in de toekomst wat meer aandacht aan besteed.
- MID() : zie functie SUBSTRING()
, methode drie : SUBSTRING('string', startpositie, lengte)
- OCT(x) : retourneert de octale waarde van x, maar niet als getal, maar als string.
Het octale stelsel werkt met het grondtal 8, in tegenstelling tot het decimale stelsel dat met het grondtal 10 werkt. Meer informatie over het octale stelsel kun je vinden op : http://nl.wikipedia.org/wiki/Octaal
- OCTET_LENGTH() : Retourneert de lengte van de opgegeven string in bytes.
SELECT tekst_titel, OCTET_LENGTH(tekst_titel) AS bytes
FROM f_teksten ;
Bovenstaande SQL query geeft als resultaat de lengte van de kolom tekst_titel, gemeten in bytes :
| tekst_titel |
bytes |
| Query bepalen volgende week donderdag |
37 |
| Willekeurig selecteren in SQL |
29 |
| MySQL ondersteuning bij PHP 5 |
29 |
| CASE statement binnen CASE statement |
36 |
| select between op datums |
24 |
| twee tabellen joinen |
20 |
| MySQL snelheid met ASP |
22 |
| Alter table met fout |
20 |
| Error in SQL syntax |
19 |
| subquery in een insert |
22 |
Spaties in de strings worden ook meegeteld omdat deze spaties ook 1 byte lang zijn. Deze functie is echter niet geheel geschikt om de lengte van strings te bepalen als je puur het aantal karakters in een string wilt tellen. Er zijn namelijk karakters die uit meer dan 1 byte bestaan. Deze functie telt het aantal bytes per karakter. Als je de lengte van een string wilt hebben, gemeten in karakters, zul je de functie CHAR_LENGTH()
moeten gebruiken. Stel dat je de lengte van de volgende string wilt bepalen :
'Het financiële hart van Curaçao is gevuld met € & $'
We maken dan een SQL query die de lengte van deze strings in karakters en bytes weergeeft :
SELECT CHAR_LENGTH('Het financiële hart van Curaçao is gevuld met € & $') AS karakters,
OCTET_LENGTH('Het financiële hart van Curaçao is gevuld met € & $') AS bytes ;
We krijgen dan als resultaat :
De volgende vreemde tekens zijn groter (gemeten in bytes) dan de overige :
ë : 2 bytes
ç : 2 bytes
€ : 3 bytes
Wat dus het verschil van 4 verklaart tussen de OCTET_LENGTH() en CHAR_LENGTH()
. kent ook de functie LENGTH()
, maar aangezien deze functie geen ANSI SQL-92 is en OCTET_LENGTH() wel, geniet deze de voorkeur.
- ORD('string') : deze functie is gelijk aan ASCII()
op het verschil na dat ORD() bij multibyte karakters, zoals bijvoorbeeld ë, ç of €, niet de ascii waarde geeft, maar een berekening van de losse bytes. Deze berekening is te vinden op www.mysql.com
- POSITION('substring' IN 'string') : is synoniem van de functie LOCATE()
, in de vorm LOCATE('substring','string').
- QUOTE('string') : deze functie retourneert de string, voorzien van enkele quotes (') om de string heen en eventuele enkele quotes in de string zelf voorzien van het escape teken slash (\) . Zo geeft de SQL query :
SELECT QUOTE(tekst_bericht) AS quotes
FROM f_teksten ;
Dit resultaat :
| quotes |
| 'Vraagstelling over een \'query\' die een bepaalde donderdag moet filteren' |
| 'Heel verhaal dat beantwoord wordt met de functie RAND' |
| 'Documentatie te vinden op php.net' |
| 'Geavancerde SQL statements die leuk en nuttig zijn, maar ook veel problemen kunnen opleveren.' |
| 'Eenvoudig op te lossen met een query' |
| 'Wordt in een andere tut besproken' |
| 'MySQL en ASP, goede combi of niet?' |
| 'hoop letters en cijfers' |
| 'Antwoord : gebruik de SQL tester' |
| 'wat wil je met deze SQL query bereiken?' |
Zoals je ziet staan alle resultaten binnen enkele quotes en staan de quotes die van origine in de tekst stonden ge-escapt.
- REPEAT('string', x) : retourneert een nieuwe string waarin de originele string x keer herhaalt is.
SELECT REPEAT('SQL',5) AS rep ;
Geeft als resultaat : SQLSQLSQLSQLSQL
Waarbij de string 'SQL' dus 5 x herhaalt is.
- REPLACE('string','te vervangen substring','vervangen door substring') : Met de functie REPLACE() (Niet te verwarren met het commando REPLACE!!) kun je een substring in een string vervangen door een andere substring. In de string twee plus twee = 4 gaan we de substring = vervangen door de substring is. We krijgen dan de SQL query :
SELECT REPLACE('twee plus twee = 4', '=', 'is') ;
Dit geeft als resultaat : twee plus twee is 4
- REVERSE('string') : retourneert het spiegelbeeld van de opgegeven string :
SELECT tekst_titel, REVERSE(tekst_titel) AS letit_tsket
FROM f_teksten ;
Geeft als resultaat :
| tekst_titel |
letit_tsket |
| Query bepalen volgende week donderdag |
gadrednod keew edneglov nelapeb yreuQ |
| Willekeurig selecteren in SQL |
LQS ni neretceles giruekelliW |
| MySQL ondersteuning bij PHP 5 |
5 PHP jib gninuetsredno LQSyM |
| CASE statement binnen CASE statement |
tnemetats ESAC nennib tnemetats ESAC |
| select between op datums |
smutad po neewteb tceles |
| twee tabellen joinen |
nenioj nellebat eewt |
| MySQL snelheid met ASP |
PSA tem diehlens LQSyM |
| Alter table met fout |
tuof tem elbat retlA |
| Error in SQL syntax |
xatnys LQS ni rorrE |
| subquery in een insert |
tresni nee ni yreuqbus |
De resultaten in de tweede kolom zijn dus overduidelijk de gespiegelde waarden van de eerste kolom. Deze functie pas ik zelf altijd toe bij password encryptie, waarbij de passworden eerst gespiegeld worden voordat ze met een encryptie methode worden opgeslagen.
- RIGHT('string',x) : retourneert een substring uit de 'string' bestaande uit x karakters lang, geteld van de rechterkant van de string.
SELECT RIGHT(tekst_titel,3) AS last3
FROM f_teksten ;
Geeft als resultaat :
| last3 |
| dag |
| SQL |
| P 5 |
| ent |
| ums |
| nen |
| ASP |
| out |
| tax |
| ert |
Zie ook de functie LEFT()
- RPAD('string','totale stringlengte','aanvullende karakters') : Deze functie retourneert een string die zo lang is als bij de 'totale stringlengte' wordt opgegeven en waarbij de 'string' wordt aangevuld met de 'aanvullende karakters' aan de rechterkant van de 'totale string'. Zie ook LPAD().
SELECT RPAD('hallo',10,'mo') AS string2 ;
Geeft als resultaat : hallomomom
De totale lengte van de nieuwe string moet 10 worden (tweede arg.). De beginstring is 'hallo', wat dus inhoud dat er 5 karakters bij moeten. Deze 5 karakters zijn : 'momom'. Deze 5 karakters (vermenigvuldiging van het derde argument) worden aan de rechterkant bijgeplaats. De functie LPAD() doet dit juist aan de linkerkant. Oftwel, deze functie vult de originele string aan de rechterkant aan met de karakters die als derde argument worden gebruikt, totdat de nieuwe string de lengte heeft bereikt die in het tweede argument is opgegeven.
- RTRIM('string') : retourneert de string zonder eventuele spaties aan de rechterkant van de string.
SELECT RTRIM(' SQL rocks! ') ;
Geeft als resultaat : ' SQL rocks!'
De spaties aan de rechterkant zijn dus verdwenen. Zie ook LTRIM()
en TRIM()
.
- SOUNDEX('string') : retourneert de zogenaamde soundex string van de opgegeven 'string'. Een soundex string is een string die via een soundex algoritme ontstaat. Deze algoritme heeft als doel de string te indexeren naar de manier waarop de string wordt uitgesproken in het Engels. Een standaard Soundex string bestaat uit één letter gevolgd door drie cijfers. De Soundex string die teruggeeft kan meer cijfers bevatten omdat de functie SOUNDEX() een variant is van het originele. Meer informatie over soundex algoritme kun je hier
vinden.
- SPACE(X) : geeft een string terug, bestaande uit X aantal spaties. Zo geeft de SQL query :
SELECT SPACE(5) ;
Als resultaat : ' '
Waarbij er vijf spaties staan tussen de enkelvoudige quotes.
- SUBSTRING() : Het doel van deze functie is om een gedeelte van een opgegeven string terug te geven als resultaat. Deze functie kan verschillende vormen van argumenten bevatten en deze gaan we dan ook uitgebreid doornemen. Als eerste zullen we de twee mogelijkheden uitleggen die volgens de ANSI SQL-92 norm worden goedgekeurd.
In onderstaande voorbeelden gaan we uit de string 'templatepowerforum' een aantal substrings halen.
SELECT SUBSTRING('templatepowerforum' FROM 9) AS sub1 ;
In bovenstaande SQL query wordt het woord 'templatepowerforum' als substring teruggegeven vanaf het 9e karakter, geteld vanaf links, oftwel : powerforum
In SQL begint het tellen bij 1 in tegenstelling tot de meeste programmeertalen, waar het tellen bij 0 begint. De p van powerforum is het 9e karakter van de string 'templatepowerforum', gezien vanaf de linkerkant. Deze methode begint bij het 9e karakter, tot aan het einde van de string.
Als we een gedeelte van de string willen hebben dat bij het 9e karakter begint, gezien van de linkerkant van de string, en de lengte heeft van 5 karakters, dan zullen we het argument moeten verlengen. We krijgen de SQL query :
SELECT SUBSTRING('templatepowerforum' FROM 9 FOR 5) AS sub2 ;
Dit geeft als resultaat : power
De substring is dus 5 karakters lang, zoals opgegeven bij het tweede argument : FOR 5 .
Bovenstaande voorbeelden zijn volgens de norm ANSI SQL-92 en genieten daarom de voorkeur. Andere databasetypes worden geacht volgens dezelfde norm te werken en de kans is dus groot dat deze twee vormen ook op andere databasetypes werken. Hieronder volgen nog twee voorbeelden van de functie SUBSTRING() zoals deze in te gebruiken is. Deze twee voorbeelden zijn dus geen ANSI SQL-92, maar PSM SQL-96. Het is waarschijnlijk dat deze vormen ook werken op andere databasetypes, maar dat hoeft dus niet persé.
In het eerste voorbeeld werd de substring vanaf het 9e karakter teruggegeven, geteld vanaf de linkerkant van de string. Een alternatieve schrijfwijze daarvoor is :
SELECT SUBSTRING('templatepowerforum', 9) AS sub3 ;
Zoals je ziet worden de argumenten nu gescheiden door een komma. Het eerste argument is de beginstring en het tweede is de positie vanwaar de substring moet beginnen, geteld vanaf links. In dit geval dus de negende positie tot aan het eind van de string.
Het resultaat is, net zoals bij het eerste voorbeeld : powerforum
In het tweede voorbeeld werd een substring als restultaat gegeven, dat vijf karakters lang was. Een alternatieve schrijfwijze voor diezelfde methode is :
SELECT SUBSTRING('templatepowerforum', 9, 5) AS sub4 ;
Bij deze methode is het tweede argument weer de beginpositie, gezien vanaf links, en het derde argument het aantal karakters naar rechts. Deze SQL query geeft als resultaat dus ook : power
Bij alle vier de voorbeelden die hierboven staan wordt een substring gegenereerd waarbij de positie van de substring leidend is en geteld wordt vanaf de linkerkant van de originele string. Het is ook mogelijk om vanaf de rechterkant van de originele string te tellen. Om dezelfde resultaten te krijgen, geteld vanaf de rechterkant van de string, wordt een negatief getal gebruikt in het argument dat de beginpositie van de substring bepaald. Met de eerste methode gebruiken we de SQL query :
SELECT SUBSTRING('templatepowerforum' FROM -8) AS sub5 ;
Geteld vanaf de rechterkant is de beginpositie de w. Als resultaat geeft deze SQL query : werforum
Om een gedeelte te krijgen gebruiken we de 2e methode met een negatief getal :
SELECT SUBSTRING('templatepowerforum' FROM -8 FOR 4) AS sub6 ;
Dit geeft als resultaat : werf
De beginpositie is dezelfde als in de vorige query, maar het FOR 4 in het argument telt vier posities naar rechts.
De alternatieve schrijfwijzes, tellend vanaf rechts geven de SQL query :
SELECT SUBSTRING('templatepowerforum', -8) AS sub7 ;
Met als resultaat : werforum
En de SQL query :
SELECT SUBSTRING('templatepowerforum', -8, 4) AS sub8 ;
Met als resultaat : werf
Het is niet mogelijk om voor de lengte van de substring een negatief getal te gebruiken.
SELECT SUBSTRING('templatepowerforum', -8, -4) AS sub9 ;
Zo geeft bovenstaande SQL query geen resultaat, maar vreemd genoeg ook geen foutmelding of NULL, ook niet in 5. kent ook de functie SUBSTR(), deze functie is synoniem voor SUBSTRING(), maar is geen ANSI SQL en geniet dus niet de voorkeur. kent ook de functie MID()
, deze functie komt overeen met de methode SUBSTRING('string', startpositie, lengte) , deze functie is PSM SQL-96.
- SUBSTRING_INDEX('string','indexstring',limiet) : deze functie retourneert een substring uit de 'string'. Deze substring is het stuk uit de string tot aan de, in de limiet opgegeven, voorkomende indexstring. Simpeler gezegd; als er in een string zes keer de letter o voorkomt en je wilt de substring tot aan de vierde keer dat de o voorkomt, krijgen we een SQL query zoals hieronder:
SELECT SUBSTRING_INDEX('voorkomkoopsom','o',4) ;
Deze SQL query retourneert : voorkomk
De string 'voorkomkoopsom' bevat zes keer de o. De substring die we uit de string willen moet reiken tot aan de vierde voorkomende o. We geven als eerste argument de string op. Als tweede argument geven we de indexstring op, in dit geval de o. Als derde argument geven we tot aan welke indexstring onze substring reikt. In de opgegeven SQL query is de indexstring dus de o en de substring moet stoppen bij de vierde o die in de string staat. Omdat het derde argument een positief getal is, begint de functie bij de linkerkant van de originele string en retourneert voorkomk. Als het derde argument een negatief getal is, krijgen we de volgende SQL query :
SELECT SUBSTRING_INDEX('voorkomkoopsom','o',-4) ;
Deze SQL query retourneert : mkoopsom
Omdat het derde argument een negatief getal is, begint deze functie met tellen vanaf de linkerkant in de originele string tot aan de vierde opgegeven indexstring. Deze functie lijkt ingewikkelder dan het is, maar als je em een paar keer probeert dan zul je zien dat het niet zo moeilijk is.
- TRIM() : deze functie kent een aantal formaten in MySQL. De eenvoudigste vorm retourneert een string zonder eventuele spaties aan de beide kanten van de string.
SELECT TRIM(' SQL rocks! ') ;
Geeft als resultaat : 'SQL rocks!'
De spaties aan de beide kanten zijn dus verdwenen. Zie ook LTRIM()
en RTRIM()
. Ook is het mogelijk om bepaalde karakters of substrings te verwijderen. In onderstaand voorbeeld gaan we de overtollig karakters x verwijderen. Dit kan door extra argumenten mee te geven.
SELECT TRIM(LEADING 'x' FROM 'xxxSQLxxx') ;
Bovenstaande SQL query geeft als resultaat : SQLxxx
Met het argument LEADING '' FROM 'xxxSQLxxx' geven we aan dat de leidende karakters x verwijderd moeten worden. De eerste drie x-en dus. In plaats van LEADING kunnen we ook BOTH en TRAILING opgeven. Both verwijderd zowel alle opgegeven karakters aan de linker- en rechterkant van de string. TRAILING verwijderd alle opgegeven karakters aan de rechterkant van de string :
SELECT TRIM(BOTH 'x' FROM 'xxxSQLxxx') ;
Geeft als resultaat : SQL
SELECT TRIM(TRAILING 'x' FROM 'xxxSQLxxx') ;
Geeft als resultaat : xxxSQL
Een voorbeeld waarmee je een substring kunt verwijderen :
SELECT TRIM(BOTH 'abc' FROM 'abcSQLabc') ;
Geeft als resultaat : SQL
Je ziet dat aan zowel de rechter- als de linkerkant de 'abc' verwijderd wordt. Bij LEADING en TRAILING zou slechts 1 'abc' verwijderd worden aan de linkerkant, respectievelijk rechterkant.
- UCASE() : synoniem van de functie UPPER()
.
- UNHEX('string') : met UNHEX() kun je een hexadecimale string omzetten naar z´n originele waarde. Deze functie is de tegenpool van HEX()
.
SELECT UNHEX('617A') ;
Geeft als resultaat : az
SELECT UNHEX(HEX('blaat')) ;
Geeft als resultaat : blaat
- UPPER('string') : retourneert het resultaat in hoofdletters.
SELECT UPPER('blaat') ;
Geeft als resultaat : BLAAT
De stringfuncties van zijn uiteraard ook te vinden op de officiële website van MySQL, waar onderscheid is gemaakt tussen de functies die gebruikt kunnen worden in