SQL jak pobrać treść zawartą między określonymi znakami? HOW-TO

Zdarza się czasami, że należy zrobić coś bardziej zaawansowanego w SQL niż pobranie danych zwykłym SELECTEM z prostymi warunkami. Takie sytuacje niestety zdarzają mi się coraz częściej :/ Ostatni przypadek dotyczył wyciągnięcia numeru telefonu zawartego w nazwie użytkownia w kolumnie, która wyglądała mniej więcej tak:

Nazwa
- – - – -
Tomasz Kowalski (1234)
Jarek Nowak (345672)
Sebastian Nowacki (234)
itd

Jak widać nr nie zawsze jest tej samej długości (odpadają funkcje RIGHT i SUBSTRING), ale zawsze jest zawarty w nawiasach (na szczęście). W necie znalazłem kilka sposobów na wyłuskanie tych danych, zwłaszcza przy wykorzystaniu funkcji WHILE itd itp, ale po analizie przypadku stwierdziłem, że da się to zrobić lepiej i tak powstał poniższy kod.

SELECT
SUBSTRING(Nazwa,(CHARINDEX('(',Nazwa))+1,(CHARINDEX(')',Nazwa))-(CHARINDEX('(',Nazwa))-1)as NR_TEL FROM...

Używajcie zapytania do woli bez żadnych ograniczeń, oczywiście po niezbędnych modyfikacjach, pod kątem Waszego przypadku(Nazwa – zmianiacie na nazwę kolumny w Waszej tabeli). Nawias możecie zastąpić dowolnym znakiem zmieniając wartości ‘)’ i ‘(‘.

Dodne w Luty 18, 2012 o 10:22 przez czeki · Link bezpośredni
W: Kodowanie, Technologia · Tagi: , , , , , ,