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, SUBSTRING(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 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 email
kolumna, która zaczyna się od pierwszego znaku i przechodzi przez siedem znaków.
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;
Wynik:
podciąg | |
---|---|
[email protected] | ake99 |
[email protected] | Amara |
[email protected] | otine |
[email protected] | essic |
Dyskusja:
Używasz SUBSTRING()
tak jak w poprzednich przykładach. 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ę od @
znak 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, SUBSTRING(email, CHARINDEX('@', email), LEN(email) - CHARINDEX('@', 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 SUBSTRING()
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ć CHARINDEX(character, column)
funkcja gdzie znak jest konkretnym znakiem, od którego chcesz rozpocząć podciąg (tutaj, @
). Kolumna argumentów to kolumna, z której chcesz pobrać podciąg; może to być również dosłowny ciąg.
Trzeci argument funkcji SUBSTRING()
funkcja to długość podciągu. Możesz to obliczyć za pomocą CHARINDEX()
i LEN()
Funkcje. Robisz to, odejmując indeks od długości kolumny, a następnie dodając 1:
LEN(email) - CHARINDEX('@', 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, SUBSTRING(email, CHARINDEX('@', email), CHARINDEX('.', email) - CHARINDEX('@', email)) AS substring FROM emails;
Wynik tego zapytania to:
podciąg | |
---|---|
[email protected] | @gmail |
[email protected] | @zoho |
[email protected] | @yahoo |
[email protected] | @onet |
Część CHARINDEX('.', email) - CHARINDEX('@', email)
po prostu oblicza długość podciągu.