Problem:
Masz kolumnę ciągów i chcesz uzyskać z nich podciągi.
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, SUBSTR(email, 1, 7) AS substring FROM emails;
Wynik:
podciąg | |
---|---|
[email protected] | jake99@ |
[email protected] | tamarab |
[email protected] | notine@ |
[email protected] | Jessica |
Dyskusja:
Użyj SUBSTR()
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.
>SUBSTR(email, 1, 7) zwróci podciągi wartości w kolumnie e-mail, które zaczynają się od pierwszego znaku i trwają siedem znaków.
Przykład 2:
Chcesz wyświetlić podciąg między indeksami 2 i 6 (włącznie).
Rozwiązanie 2:
SELECT email, SUBSTR(email, 2, 5) AS substring FROM emails;
Wynik:
podciąg | |
---|---|
[email protected] | ake99 |
[email protected] | Amara |
[email protected] | otine |
[email protected] | essic |
Dyskusja:
Używasz SUBSTR()
tak jak w poprzednim przykładzie. Tym razem drugim argumentem funkcji jest 2, ponieważ chcemy zacząć od indeksu 2. Długość podciągu wynosi 5 (end_index - start_index + 1
).
Przykład 3:
Chcesz wyświetlić podciąg, który zaczyna się znakiem @ i kończy się na końcu ciągu, ale nie znasz dokładnych indeksów ani długości.
Rozwiązanie 3:
SELECT email, SUBSTR(email, INSTR(email, '@'), LENGTH(email) - INSTR(email, '@') + 1) 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 SUBSTR()
tak 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ć INSTR(column, character)
funkcja, gdzie kolumna jest ciągiem literału lub kolumną, z której chcesz pobrać podciąg, a znak jest character
w którym chcesz rozpocząć podciąg (tutaj, @
).
Trzeci argument funkcji SUBSTR()
funkcja to długość podciągu. Możesz to obliczyć za pomocą INSTR()
i LENGTH()
Funkcje. Robisz to, odejmując indeks od długości kolumny, a następnie dodając 1:
LENGTH(email) - INSTR(email, '@') + 1
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 jak możesz to zrobić:
SELECT email, SUBSTR(email, INSTR(email, '@'), INSTR(email, '.') - INSTR(email, '@')) AS substring FROM emails;
Wynik tego zapytania to:
podciąg | |
---|---|
[email protected] | @gmail |
[email protected] | @zoho |
[email protected] | @yahoo |
[email protected] | @onet |
Część INSTR(email, '.') - INSTR(email, '@')
po prostu oblicza długość podciągu.