sql >> Database teknologi >  >> RDS >> Mysql

Sådan udtrækkes en understreng fra en streng i PostgreSQL/MySQL

Problem:

Sådan udtrækkes en understreng fra en streng i PostgreSQL/MySQL

Eksempel 1:

I emails tabel, er der en e-mail-kolonne. Du vil gerne vise de første syv tegn i hver e-mail.

Tabellen ser således ud:

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

Løsning 1:

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

En anden syntaks:

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

Resultatet er:

e-mail understreng
[email protected] jake99@
[email protected] tamarab
[email protected] notine@
[email protected] jessica

Diskussion:

Brug SUBSTRING() fungere. Det første argument er strengen eller kolonnenavnet. Det andet argument er indekset for det tegn, hvor understrengen skal begynde. Det tredje argument er længden af ​​understrengen.

Pas på! I modsætning til nogle andre programmeringssprog starter indeksene ved 1 , ikke 0. Det betyder, at det første tegn har indeks 1, det andet tegn har indeks 2 osv.

SUBSTRING(email, 1, 7) returnerer understrengene af værdierne i e-mail-kolonnen, der starter i begyndelsen af ​​strengene (første tegn) og går efter syv tegn. Den anden notation, SUBSTRING(email FROM 1 FOR 7) , gør præcis det samme. Argumentet efter FROM er startindekset og argumentet efter FOR er understrengens længde.

Det tredje argument for SUBSTRING() funktion er valgfri. Hvis du udelader det, får du den understreng, der starter ved indekset i det andet argument og går helt op til slutningen af ​​strengen. SUBSTRING(email, 1) returnerer hele strengen, ligesom SUBSTRING(email FROM 1) .

Eksempel 2:

Du vil gerne vise understrengen mellem indeks 2 og 6 (inklusive).

Løsning 2:

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

En anden syntaks:

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

Resultatet er:

e-mail understreng
[email protected] @gmail.com
[email protected] @zoho.com
[email protected] @yahoo.fr
[email protected] @onet.pl

Diskussion:

Du bruger SUBSTRING() fungerer som i de foregående eksempler. Denne gang leder du efter en bestemt karakter, hvis position kan variere fra række til række. For at finde indekset for det specifikke tegn, kan du bruge POSITION(character IN column) funktion, hvor tegn er det specifikke tegn, hvor du vil starte understrengen (her, @ ). Argumentkolonnen er column hvorfra du gerne vil hente understrengen; det kan også være en bogstavelig streng.

Hvis du ønsker, at understrengen skal gå helt til slutningen af ​​den oprindelige streng, er det tredje argument i SUBSTRING() funktionen (eller FOR argument) er ikke nødvendig. Ellers skal det være længden af ​​understrengen, eller du kan beregne det ved hjælp af POSITION() fungere. Du vil måske også hente en understreng, der ikke ender i slutningen af ​​strengen, men med et bestemt tegn, f.eks. før '.'. Her er et eksempel:

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

En anden syntaks:

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

Resultatet af denne forespørgsel er:

e-mail understreng
[email protected] @gmail
[email protected] @zoho
[email protected] @yahoo
[email protected] @onet

Delen POSITION('.' IN email) - POSITION('@' IN email) beregner blot længden af ​​understrengen.


  1. Sådan overføres en null-variabel til en SQL Stored Procedure fra C#.net-kode

  2. TODATETIMEOFFSET() Eksempler i SQL Server

  3. Sådan tjekker du versionen af ​​oracle provider til ole-db. OraOLEDB.Oracle udbyder

  4. FROM_TZ() Funktion i Oracle