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:
[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:
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:
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:
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.