sql >> Database >  >> RDS >> Oracle

Een subtekenreeks extraheren uit een tekenreeks in Oracle/SQLite

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:

e-mail
[email protected]
[email protected]
[email protected]
[email protected]

Oplossing 1:

SELECT
  email,
  SUBSTR(email, 1, 7) AS substring
FROM emails;

Het resultaat is:

e-mail 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:

e-mail 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:

e-mail 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:

e-mail 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.


  1. Room Migration Alter Table voegt geen nieuwe kolom toe &migreert steeds opnieuw gebeld worden

  2. SQL Kiezen uit twee tabellen met inner join en limit

  3. 5 manieren om hoofdletterongevoelig zoeken in SQLite te implementeren met volledige Unicode-ondersteuning

  4. Selecteer datatype van het veld in postgres