Funkcje tekstowe mySQL – Kurs języka SQL
Funkcje tekstowe SQL wraz z przykładami
Poniżej przykładowa tabelka pracownik, która posłuży nam do niektórych przykładowych zapytań SQL:
id | imie | nazwisko | godzin | stawka | stranowisko |
---|---|---|---|---|---|
234 | Jan | Kowalski | 164 | 12.36 | pracownik socjalny |
Funkcje tekstowe SQL zostały podzielone w zależności od ich zastosowania.
Wielkość liter
LOWER() lub LCASE() – zamienia wszystkie litery w podanym ciągu (bądź kolumnie) na małe litery
SELECT LOWER('DAMIAN'); -- damian
SELECT LOWER(nazwisko) FROM pracownik; — nowak
UPPER() lub UCASE() – zamienia wszystkie litery w podanym ciągu (bądź kolumnie) na drukowane (wielkie litery)
SELECT UPPER('damian'); -- DAMIAN
SELECT UPPER(nazwisko) FROM pracownik; — NOWAK
Długość ciągu
BIT_LENGTH() – funkcja zwraca długość ciągu podaną w bitach
SELECT BIT_LENGTH('abcd'); -- 32
LENGTH() lub CHAR_LENGTH() lub CHARACTER_LENGTH() lub OCTET_LENGTH() – funkcja zwraca długość ciągu podanego jako argument. Najczęściej używa się funkcji LENGTH pozostałe realizują taką samą funkcje.
SELECT LENGTH('Damian'); -- 6
Puste znaki
TRIM() – usuwa puste znaki (spacje) na początku i końcu podanego ciągu
SELECT TRIM(' Przykładowy tekst '); -- "Przykładowy tekst"
LTRIM() – usuwa puste znaki (spacje) na początku podanego ciągu
SELECT LTRIM(' Przykładowy tekst '); -- "Przykładowy tekst "
RTRIM() – usuwa puste znaki (spacje) na końcu podanego ciągu
SELECT RTRIM(' Przykładowy tekst '); -- " Przykładowy tekst"
Łączenie ciągów
CONCAT() – łączenie ciągów, ciąg może być zawartością danej kolumny jak i dowolnym tekstem. Tekst wprowadza się wtedy w cudzysłowiach.
SELECT CONCAT(imie, nazwisko) FROM pracownik; -- JanKowalski
CONCAT_WS() – łączenie ciągów z zastosowaniem określonego separatora, np: ‘ ‘. Separator należy podać w cudzysłowiu.
SELECT CONCAT_WS(' ', imie, nazwisko) FROM pracownik; -- Jan Kowalski
INITCAP() – zamienia pierwszą literę w każdym słowie na dużą
SELECT INITCAP('pracownik socjalny'); -- Pracownik Socjalny
LPAD() – uzupełnienie ciągu z lewej strony o określony ciąg do określonej długości. W poniższym przypadku do ciągu nazwa będą dodawane “0” póki ciąg nie będzie miał długości 15 znaków.
SELECT LPAD('nazwa', '15', '0'); -- 0000000000nazwa
RPAD() – uzupełnienie ciągu z prawej strony o określony ciąg do określonej długości. W poniższym przypadku do ciągu nazwa będą dodawane “0” póki ciąg nie będzie miał długości 15 znaków.
SELECT RPAD('nazwa', '15', '0'); -- nazwa0000000000
SPACE() – funkcja wstawia określoną ilość spacji
SELECT SPACE(5); -- " "
SELECT concat(‘Piec’, space(5), ‘spacji’); — “Piec spacji”
INSERT() – funkcja wstawia do określonego ciągu zdefiniowany w funkcji ciąg począwszy od podanej pozycji zamieniając określoną ilość znaków. W poniższym przykładzie wstawiamy do ciągu “Matematyczny” ciąg “POLSKI” zaczynając od “3” znaku zastępując (kasując) “4” znaki ciągu Matematyka.
SELECT INSERT('Matematyczny', 3, 4, 'POLSKI'); -- MaPOLSKItyczny
REPEAT() – funkcja powtarza podany w parametrze ciąg określoną ilość razy, w poniższym przypadku ciąg “Wyraz” zostanie powtórzony “3” razy.
SELECT REPEAT('Wyraz', '3'); -- WyrazWyrazWyraz
Wycinanie ciągów i zastępowanie znaków/ciągów
REPLACE() – funkcja zamienia w podanym ciągu (kolumnie) wskazany ciąg znaków na inny określony ciąg znaków. W poniższym przykładzie dla podanego ciągu “nazwa” każde wystąpienie ciągu “az” zostanie zamienione na “X”.
SELECT REPLACE('nazwa', 'az', 'X'); -- nXwa
SELECT REPLACE(stanowisko,’socjalny’,’administracyjny’) FROM pracownik; — pracownik administracyjny
LEFT() – funkcja zwraca określoną ilość znaków licząc od lewej strony dla podanego ciągu. W naszym przykładzie zwróci 5 znaków od lewej.
SELECT LEFT('To jest zdanie normalne', '5'); -- To je
SELECT LEFT(stanowisko, 6) FROM pracownik; — pracow
RIGHT() – funkcja zwraca określoną ilość znaków licząc od prawej strony dla podanego ciągu. W naszym przykładzie zwróci 4 znaki od prawej.
SELECT RIGHT('To jest zdanie normalne', '4'); -- alne
SELECT RIGHT(stanowisko, 8) FROM pracownik; — socjalny
MID() – funkcja wycina z podanego ciągu określoną liczbę znaków rozopczynając od konkretnej pozycji. W poniższym przykładzie funkcja obetnie z ciągu “ToJestPrzykladoweZdanie” osiem znaków rozpoczynając od znaku siódmego.
SELECT MID('ToJestPrzykladoweZdanie', '7', '8'); -- Przyklad
SELECT MID(stanowisko,’6′,’4′) FROM pracownik; — wnik
SUBSTR() lub SUBSTRING() – funkcja wycina z podanego ciągu określoną liczbę znaków zaczynając od znaku określonego parametrem. W poniższym przykładzie z podanego ciągu “Nowy wyraz” po wycięciu 4 znaków licząc od 6 znaku powstanie nowy ciąg “wyra”.
SELECT SUBSTR('Nowy wyraz','6','4'); -- wyra
SELECT SUBSTR(stanowisko,’6′,’4′) FROM pracownik; — wnik
Funkcje porównujące
LIKE() – funkcja porównująca dwa argumenty, w przypadku gdy są takie same zwraca “1”, gdy różne zwraca “0”
SELECT 'A' like 'A'; -- 1
SELECT ‘A’ like ‘B’; — 0
NOT LIKE() – funkcja porównująca dwa argumenty, w przypadku gdy są takie same zwraca “0”, gdy różne zwraca “1” (negacja funkcji LIKE)
SELECT 'A' NOT like 'A'; -- 0
SELECT ‘A’ NOT like ‘B’; — 1
STRCMP() – funkcja porównuje dwa ciągi i zwraca: “0” – jeżeli oba ciągi są takie same, “-1” – gdy pierwszy ciąg jest mniejszy niż drugi, “1” – w pozostałych przypadkach
SELECT STRCMP('Wyraz','Wyraz'); -- 0
SELECT STRCMP(‘Wyraz’,’Inny wyraz’); — 1
REGEXP() lub RLIKE() – funkcja pozwalająca sprawdzić czy podany ciąg odpowiada zdefiniowanemu wzorcowi. W przypadku gdy porównanie da wynik pozytywny wtedy funkcja zwróci “1”, w przeciwnym przypadku “0”. W poniższym przykładzie sprawdzimy czy podany kod pocztowy pasuje do polskiego wzorca kodów pocztowych. Więcej informacji o funkcji REGEXP znajdziecie w osobnym artykule.
SELECT '60-300' REGEXP '[0-9][0-9]-[0-9][0-9][0-9]'; -- 1
SELECT ’60-3XA’ REGEXP ‘[0-9][0-9]-[0-9][0-9][0-9]’; — 0
NOT REGEXP() lub NOT RLIKE() – funkcja pozwalająca sprawdzić czy podany ciąg nie pasuje do zdefiniowanego wzorca. W przypadku gdy porównanie da wynik negatywny wtedy funkcja zwróci “1”, w przeciwnym przypadku “0”.
SELECT '60-300' NOT REGEXP '[0-9][0-9]-[0-9][0-9][0-9]'; -- 1
SELECT ’60-3XA’ NOT REGEXP ‘[0-9][0-9]-[0-9][0-9][0-9]’; — 0
SOUNDEX() – funkcja zwraca kod soundex dla podanego wyrazu. Funkcja używana do porównywania wyrazów, których wymowa jest identyczna mimo różnych zapisów. Wyrazy SEE oraz SEA mają różną pisownie mimo to brzmią tak samo, stąd oba otrzymują SOUNDEX równy S000.
SELECT soundex('home'); -- H500
SELECT SOUNDEX(‘see’), SOUNDEX(‘sea’); — S000 S000
SOUNDS LIKE() – funkcja zwraca rekordy dla których “warunek” brzmi jak zdefiniowany wzorzec. Dla poniższego przykładu załóżmy, że mamy tabelę wyrazy w której znajdują się wyrazy: sea, see, home, seek.
Funkcja wyświetli wyrazy, które wypowiedziane brzmią jak wyraz sea
SELECT wyraz FROM wyrazy WHERE wyraz SOUNDS LIKE 'sea'; -- see, sea
Funkcje wyszukujące
ELT() – funkcja zwraca wskazany argument podanego ciągu. W tym przypadku zwróci 3 argument, czyli ciąg: “Trzeci”
SELECT ELT(3, 'Pierwszy', 'Drugi', 'Trzeci'); -- Trzeci
FIELD() – funkcja zwraca pozycję wystąpienia danego ciągu w podanych ciągach. Zatem podany ciąg ‘Drugi’ zostanie znaleziony w zbiorze wartości ‘Pierwszy’, ‘Drugi’, ‘Trzeci’ na drugim miejscu
SELECT FIELD('Drugi', 'Pierwszy', 'Drugi', 'Trzeci'); -- 2
FIND_IN_SET() – funkcja zwraca pozycję wystąpienia danego ciągu w podanym ciągu
SELECT FIND_IN_SET('Drugi', 'Pierwszy,Drugi,Trzeci'); -- 2
INSTR() – funkcja wyszukuje w podanym ciągy określonego ciągu podając pozycję na której on występuje. W poniższym przykładzie ciąg “rz” rozpoczyna się na “8” pozycji ciągu “ToJestPrzykladoweZdanie”
SELECT INSTR('ToJestPrzykladoweZdanie', 'rz'); -- 8
LOCATE() lub POSITION() – funkcja zwraca miejsce wystąpienia określonego ciągu w danym ciągu. W poniższym przypadku ciąg “je” rozpoczyna się na 4 pozycji
SELECT LOCATE('je', 'To jest zdanie normalne'); -- 4
MAKE_SET() – funkcja zwraca ciąg określony “bitowo” przez pierwszy parametr, wyjaśnienie poniższego przykładu:
0 – 000 – wynik:
1 – 100 – wynik: pierwszy
2 – 010 – wynik: drugi
3 – 110 – wynik: pierwszy, drugi
4 – 001 – wynik: trzeci
5 – 101 – wynik: pierwszy, trzeci
6 – 011 – wynik: drugi, trzeci
7 – 111 – wynik: pierwszy, drugi, trzeci
SELECT MAKE_SET(5,'pierwszy','drugi','trzeci'); -- pierwszy,trzeci
EXPORT_SET() – funkcja zwracająca ciąg tekstowy według podanego wzorca. Dla poniższego przykładu będzie to ciąg składający się z “10” znaków rozdzielonych między sobą znakiem “|” gdzie na
czwartej pozycji wystąpi “X” zaś pozostałe znaki będą “o”. Wartość “8” podana jako parametr oznacza 4 bit.
SELECT EXPORT_SET(8,'X','o','|',10); -- o|o|o|X|o|o|o|o|o|o
Zatem patrząc “od tyłu” 2^0 2^1 2^2 2^3 – 0001 oznacza binarnie “8”. Inny przykład:
SELECT EXPORT_SET(17,'X','o','|',10); -- X|o|o|o|X|o|o|o|o|o
Zatem patrząc “od tyłu” 2^0*1 2^1*0 2^2*0 2^3*0 2^4*1 – 10001 oznacza binarnie 17″
Kodowanie i dekodowanie ciągów, konwersja/formatowanie ciągów i liter
FORMAT() – funkcja zwraca podaną wartość w określonym formacje, w poniższym przykładzie zaokrągloną do 4 miejsc po “kropce”. Warto zwrócić uwagę na separator tysięczny, którym jest znak “przecinka”
SELECT FORMAT(1234.123456, 4); -- 1,234.1235
QUOTE() – funkcja wstawiająca podany ciąg w cudzysłów
SELECT QUOTE('Teskt w cudzyslowiu'); -- 'Teskt w cudzyslowiu'
REVERSE() – funkcja odwraca “odbija” podany ciąg (kolejność liter)
SELECT REVERSE('To jest zdanie normalne'); -- enlamron einadz tsej oT
TO_BASE64() – kodowanie podanego tekstu przy wykorzystaniu algorytmu BASE64
SELECT TO_BASE64('To jest przykladowy tekst'); -- VG8gamVzdCBwcnp5a2xhZG93eSB0ZWtzdA==
FROM_BASE64() – odkodowanie podanego ciągu przy wykorzystaniu algorytmu BASE64
SELECT FROM_BASE64('VG8gamVzdCBwcnp5a2xhZG93eSB0ZWtzdA=='); -- To jest przykladowy tekst
CHAR() – podaje znak dla określonego kodu ASCII
SELECT CHAR(68); -- D
ASCII() lub ORD() – podaje kod ASCII dla określonego znaku (funkcja odwrotna do powyższej)
SELECT ASCII('D'); -- 68
BIN() – funkcja zwraca binarną wartość dla podanej liczby
SELECT BIN(17); -- 10001
OCT() – funkcja zwraca ósemkową wartość dla podanej liczby
SELECT OCT(11); -- 13
HEX() – zamienia podany ciąg/liczbę na postać heksadecymalną (szesnastkową)
SELECT HEX('Tekst'); -- 54656B7374
SELECT HEX(46548); — B5D4
UNHEX() – zamienia podaną wartość heksadecymalną (szesnastkową) na ciąg alfanumeryczny
SELECT UNHEX('54656B7374'); -- Tekst