Probleem:
Je hebt een kolom met tekenreeksen en je wilt er subtekenreeksen van krijgen.
Voorbeeld 1:
In de emails
tabel, is er een e-mailkolom. U wilt de eerste zeven tekens van elke e-mail weergeven.
De tabel ziet er als volgt uit:
[email protected] |
[email protected] |
[email protected] |
[email protected] |
Oplossing 1:
SELECT email, SUBSTR(email, 1, 7) AS substring FROM emails;
Het resultaat is:
subtekenreeks | |
---|---|
[email protected] | jake99@ |
[email protected] | tamarab |
[email protected] | notine@ |
[email protected] | jessica |
Discussie:
Gebruik een SUBSTR()
functie. Het eerste argument is de tekenreeks of de kolomnaam. Het tweede argument is de index van het teken waarop de substring moet beginnen. Het derde argument is de lengte van de substring.
Kijk uit! In tegenstelling tot sommige andere programmeertalen, de indexen beginnen bij 1 , niet 0. Dit betekent dat het eerste teken index 1 heeft, het tweede teken index 2, enz.
>SUBSTR(email, 1, 7) retourneert de subtekenreeksen van de waarden in de e-mailkolom die beginnen bij het eerste teken en zeven tekens bevatten.
Voorbeeld 2:
U wilt de subtekenreeks tussen indexen 2 en 6 (inclusief) weergeven.
Oplossing 2:
SELECT email, SUBSTR(email, 2, 5) AS substring FROM emails;
Het resultaat is:
subtekenreeks | |
---|---|
[email protected] | ake99 |
[email protected] | amara |
[email protected] | otine |
[email protected] | essic |
Discussie:
Je gebruikt de SUBSTR()
functioneren net als in het vorige voorbeeld. Deze keer is het tweede argument van de functie 2, omdat we willen beginnen bij index 2. De lengte van de substring is 5 (end_index - start_index + 1
).
Voorbeeld 3:
U wilt de subtekenreeks weergeven die begint bij het @-teken en eindigt aan het einde van de tekenreeks, maar u kent de exacte indexen of lengtes niet.
Oplossing 3:
SELECT email, SUBSTR(email, INSTR(email, '@'), LENGTH(email) - INSTR(email, '@') + 1) AS substring FROM emails;
Het resultaat is:
subtekenreeks | |
---|---|
[email protected] | @gmail.com |
[email protected] | @zoho.com |
[email protected] | @yahoo.fr |
[email protected] | @onet.pl |
Discussie:
Je gebruikt de SUBSTR()
functioneren net als in de vorige voorbeelden. Deze keer ben je op zoek naar een specifiek personage waarvan de positie van rij tot rij kan verschillen. Om de index van het specifieke teken te vinden, kunt u de INSTR(column, character)
gebruiken functie, waarbij kolom de letterlijke tekenreeks is of de kolom waaruit u de subtekenreeks wilt ophalen, en teken het character
is waarop u de substring wilt starten (hier, @
).
Het derde argument van de SUBSTR()
functie is de lengte van de subtekenreeks. Je kunt het berekenen met de INSTR()
en de LENGTH()
functies. U doet dit door de index af te trekken van de kolomlengte en vervolgens 1 op te tellen:
LENGTH(email) - INSTR(email, '@') + 1
Mogelijk wilt u ook een subtekenreeks ophalen die niet aan het einde van de tekenreeks eindigt, maar op een specifiek teken, bijvoorbeeld vóór '.' Hier leest u hoe u dit kunt doen:
SELECT email, SUBSTR(email, INSTR(email, '@'), INSTR(email, '.') - INSTR(email, '@')) AS substring FROM emails;
Het resultaat van deze zoekopdracht is:
subtekenreeks | |
---|---|
[email protected] | @gmail |
[email protected] | @zoho |
[email protected] | @yahoo |
[email protected] | @onet |
Het deel INSTR(email, '.') - INSTR(email, '@')
berekent eenvoudig de lengte van de substring.