sql >> Database >  >> RDS >> Mysql

Een subtekenreeks extraheren uit een tekenreeks in PostgreSQL/MySQL

Probleem:

Een subtekenreeks extraheren uit een tekenreeks in PostgreSQL/MySQL

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,
  SUBSTRING(email, 1, 7) AS substring
FROM emails;

Een andere syntaxis:

SELECT
  email,
  SUBSTRING(email FROM 1 FOR 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 de SUBSTRING() 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.

SUBSTRING(email, 1, 7) retourneert de subtekenreeksen van de waarden in de e-mailkolom die beginnen aan het begin van de tekenreeksen (eerste teken) en zeven tekens bevatten. De andere notatie, SUBSTRING(email FROM 1 FOR 7) , doet precies hetzelfde. Het argument na de FROM is de startindex, en het argument na de FOR is de lengte van de substring.

Het derde argument van de SUBSTRING() functie is optioneel. Als je het weglaat, krijg je de substring die begint bij de index in het tweede argument en helemaal doorloopt tot het einde van de string. SUBSTRING(email, 1) zal de hele string teruggeven, net zoals SUBSTRING(email FROM 1) .

Voorbeeld 2:

U wilt de subtekenreeks tussen indexen 2 en 6 (inclusief) weergeven.

Oplossing 2:

SELECT
  email,
  SUBSTRING(email, 2, 5) AS substring
FROM emails;

Een andere syntaxis:

SELECT
  email,
  SUBSTRING(email FROM POSITION('@' IN email)) 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 SUBSTRING() functioneren zoals 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 POSITION(character IN column) gebruiken functie, waarbij teken het specifieke teken is waarmee u de subtekenreeks wilt starten (hier @ ). De argumentkolom is de column waarvan u de substring wilt ophalen; het kan ook een letterlijke tekenreeks zijn.

Als je wilt dat de substring helemaal naar het einde van de originele string gaat, het derde argument in de SUBSTRING() functie (of de FOR argument) is niet nodig. Anders zou het de lengte van de substring moeten zijn, of je kunt het berekenen met de POSITION() functie. U wilt misschien ook een subtekenreeks ophalen die niet aan het einde van de tekenreeks eindigt, maar op een specifiek teken, bijvoorbeeld vóór '.'. Hier is een voorbeeld:

SELECT
  email,
  SUBSTRING(email, POSITION('@' IN email), POSITION('.' IN email) - POSITION('@' IN email)) AS substring
FROM emails;

Een andere syntaxis:

SELECT
  email,
  SUBSTRING(email FROM POSITION('@' IN email) FOR POSITION('.' IN email) - POSITION('@' IN 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 POSITION('.' IN email) - POSITION('@' IN email) berekent eenvoudig de lengte van de substring.


  1. AMD EPYC 7002-serie processors en SQL Server

  2. is er een voordeel aan varchar(500) ten opzichte van varchar(8000)?

  3. Case-statement in MySQL

  4. MySQL selecteert snel 10 willekeurige rijen uit 600K rijen