15:40
MySQL - Wyrażenia regularne
Wyrażenia regularne dają większe możliwości w zakresie wyszukiwania rekordów w bazie danych. Oferują one bardzo dużą elastyczność podczas wyszukiwania wzorca i służą do precyzyjnego charakteryzowania sekwencji znaków. Występują w większości języków programowania, a także w bazach danych. Baza MySQL również posiada tą funkcjonalność. Ciąg znaków można scharakteryzować z pomocą pewnych metaznaków.Metaznaki wyrażeń regularnych dla MySQL
Mimo, że wiele języków umożliwia używanie wyrażeń regularnych to te znaki mogą być różne dla danych języków programowania. Poniżej znajduje się lista znaków dla MySQL.
.- dowolny znak^- początek ciągu$- koniec ciągu[...]- dowolny znak ze zbioru (...)[^...]- dowolny znak spoza zbioru (...)[:k:]- dowolny znak z danej klasy ka*- liczba wystąpień znaku a wynosi zero lub więceja+- co najmniej jedno wystąpienie znaki aa?- co najwyżej jedno wystąpienie znaku aa{5}– pięciokrotne wystąpienie znaku aa{1,5}– wystąpienie znaku a od jednego do pięciu razya{5,}- wystąpienie znaku a co najmniej 5 razya|b– wystąpienie znaku a lub b(...)- definicja wyrażenia składowego
Aby poinformować MySQL o używaniu w zapytaniu wyrażeń regularnych używa się polecenia REGEXP. MySQL nie rozróżnia wielkości znaków w wewnątrz zapytania, więc decyzja czy używać małe, czy wielkie litery podczas tworzenia zapytania należy do użytkownika. Bywają też sytuacje, kiedy znak do wyszukania stanowi część wyrażenia regularnego (np. wyszukanie znaku [). W takim wypadku przed użyciem danego symbolu należy dodać (np. [).
Przykłady użycia wyrażeń regularnych
Stosowanie wyrażeń regularnych nie jest trudne, jak to się często początkującym użytkownikom wydaje. Poniżej prezentuję kilka zagadnień związanych z zapytaniami MySQL z wyrażeniami regularnymi.
Wyszukanie rekordów kończących się ciągiem "a";
SELECT id,txt1 FROM test.test WHERE txt1 REGEXP 'a$';
Wyszukiwanie rekordów zaczynających się od cyfry
SELECT id,txt1 FROM test.test WHERE txt1 REGEXP '^[:0-9:]';
Wyszukanie rekordów zawierających ciąg "jak"
SELECT id,txt1 FROM test.test WHERE txt1 REGEXP 'jak';
Wyszukiwanie rekordów, w których pierwszy wyraz zaczyna się na s
SELECT id,txt2 FROM test.test WHERE txt2 REGEXP '^([[:<:]]s)';
Wyszukiwanie rekordów, dłuższych niż jeden wyraz
SELECT id,txt2 FROM test.test WHERE txt2 REGEXP '^.+ ';
Wyszukiwanie rekordów z adresami stron internetowych
SELECT id,txt1 FROM test.test WHERE txt1 REGEXP '(http://)+[a-z0-9]+(.[a-z0-9])*(.[a-z])';
Wyszukiwanie rekordów zawierających adres email
SELECT id,txt1 FROM test.test WHERE txt1 REGEXP '([a-z0-9]+@{1}[a-z0-9]+(.[a-z][0-9])*(.[a-z]))';

Komentarze:
12:31
Razi Thx, przydalo sie:D Nigdzie nie moglem znalezc
17:16
Beny
Przydatne.
Można by temat rozwinąć.
04:18
adam Witam, a co jesli szukam rekordów w których w jednym z pół typu TEXT występuje dany wyraz zakonczony spacją? probuje ale jakos nie idzie. pozdawiam
Dodaj komentarz:

English
Nazywam się Tomasz Chudyk i witam na mojej stronie. Z zawodu jestem programistą. Moje zainteresowania krążą głównie wokół open-source, Linuksa i technologi internetowych.
