Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak wyodrębnić podciąg z ciągu w PostgreSQL/MySQL?

Problem:

Jak wyodrębnić podciąg z ciągu w PostgreSQL/MySQL

Przykład 1:

W emails tabeli, znajduje się kolumna e-mail. Chcesz wyświetlić pierwszych siedem znaków każdego e-maila.

Tabela wygląda tak:

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

Rozwiązanie 1:

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

Inna składnia:

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

Wynik:

e-mail podciąg
[email protected] jake99@
[email protected] tamarab
[email protected] notine@
[email protected] Jessica

Dyskusja:

Użyj SUBSTRING() funkcjonować. Pierwszym argumentem jest ciąg znaków lub nazwa kolumny. Drugim argumentem jest indeks znaku, od którego powinien zaczynać się podciąg. Trzeci argument to długość podłańcucha.

Uważaj! W przeciwieństwie do niektórych innych języków programowania, indeksy zaczynają się od 1 , a nie 0. Oznacza to, że pierwszy znak ma indeks 1, drugi znak ma indeks 2 itd.

SUBSTRING(email, 1, 7) zwróci podciągi wartości w kolumnie e-mail, które zaczynają się na początku ciągów (pierwszy znak) i obejmują siedem znaków. Inna notacja, SUBSTRING(email FROM 1 FOR 7) , robi dokładnie to samo. Argument po FROM jest indeksem początkowym, a argumentem po FOR to długość podciągu.

Trzeci argument funkcji SUBSTRING() funkcja jest opcjonalna. Jeśli go pominiesz, otrzymasz podciąg, który zaczyna się od indeksu w drugim argumencie i idzie aż do końca ciągu. SUBSTRING(email, 1) zwróci cały ciąg, podobnie jak SUBSTRING(email FROM 1) .

Przykład 2:

Chcesz wyświetlić podciąg między indeksami 2 i 6 (włącznie).

Rozwiązanie 2:

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

Inna składnia:

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

Wynik:

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

Dyskusja:

Używasz SUBSTRING() funkcjonować jak w poprzednich przykładach. Tym razem szukasz konkretnej postaci, której pozycja może się różnić w zależności od rzędu. Aby znaleźć indeks określonego znaku, możesz użyć POSITION(character IN column) funkcja, gdzie znak jest konkretnym znakiem, od którego chcesz rozpocząć podciąg (tutaj, @ ) . Kolumna argumentów to column z którego chcesz pobrać podciąg; może to być również dosłowny ciąg.

Jeśli chcesz, aby podciąg przechodził aż do końca oryginalnego ciągu, trzeci argument w SUBSTRING() funkcja (lub FOR argument) nie jest potrzebny. W przeciwnym razie powinna to być długość podciągu lub możesz ją obliczyć za pomocą POSITION() funkcjonować. Możesz również chcieć pobrać podciąg, który nie kończy się na końcu ciągu, ale na określonym znaku, np. przed „.”. Oto przykład:

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

Inna składnia:

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

Wynik tego zapytania to:

e-mail podciąg
[email protected] @gmail
[email protected] @zoho
[email protected] @yahoo
[email protected] @onet

Część POSITION('.' IN email) - POSITION('@' IN email) po prostu oblicza długość podciągu.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wystąpił błąd JNI, sprawdź instalację i spróbuj ponownie w Eclipse x86 Windows 8.1

  2. Podstawy dostrajania MySQL na serwerach dedykowanych

  3. brew zainstaluj mysql na macOS

  4. MySQL ON DUPLICATE KEY - id ostatniego wstawienia?

  5. Jak wyszukiwać (bez uwzględniania wielkości liter) w kolumnie przy użyciu symbolu wieloznacznego LIKE?