Forum IT Moldova

Funcții MySQL: șir,...
 
Notificări
Șterge tot

Funcții MySQL: șir, numeric, definit de utilizator, stocat


Luna
Postări: 279
 Luna
Admin
Topic starter
(@elucy)
Reputable Member
S-a alăturat: 3 ani în urmă

Funcții MySQL: șir, numeric, definit de utilizator, stocat

 

MySQL poate face mult mai mult decât doar stocarea și preluarea datelor. De asemenea, putem efectua manipulări asupra datelor înainte de a le prelua sau salva. Aici intervin Funcțiile MySQL. Funcțiile sunt pur și simplu bucăți de cod care efectuează unele operații și apoi returnează un rezultat. Unele funcții acceptă parametri, în timp ce alte funcții nu acceptă parametri.

Să ne uităm pe scurt la un exemplu de funcție MySQL. În mod implicit, MySQL salvează tipurile de date de date în formatul „AAAA-LL-ZZ”. Să presupunem că am construit o aplicație și utilizatorii noștri doresc ca data să fie returnată în formatul „ZZ-LL-AAAA”, putem folosi MySQL încorporat în funcția DATE_FORMAT pentru a realiza acest lucru. DATE_FORMAT este una dintre cele mai utilizate funcții din MySQL. O vom analiza în mai multe detalii pe măsură ce desfășurăm lecția.

   

 

Pe baza exemplului dat în introducere, oamenii cu experiență în programarea computerelor se pot gândi „De ce să ne deranjezi Funcțiile MySQL? Același efect poate fi obținut cu limbajul de scripting/programare?” Este adevărat că putem realiza asta prin scrierea unor proceduri/funcție în programul aplicației.

Revenind la exemplul nostru DATE din introducere, pentru ca utilizatorii noștri să obțină datele în formatul dorit, stratul de afaceri va trebui să facă procesarea necesară.

Aceasta devine o problemă atunci când aplicația trebuie să se integreze cu alte sisteme. Când folosim funcții MySQL, cum ar fi DATE_FORMAT, atunci putem avea acea funcționalitate încorporată în baza de date și orice aplicație care are nevoie de date le primește în formatul necesar. Acest lucru reduce reluarea în logica de afaceri și reduce inconsecvențele datelor.

Un alt motiv pentru care ar trebui să luăm în considerare utilizarea funcțiilor MySQL este faptul că poate ajuta la reducerea traficului de rețea în aplicațiile client/server . Business Layer va trebui doar să apeleze la funcțiile stocate fără a fi nevoie să manipuleze datele. În medie, utilizarea funcțiilor poate ajuta la îmbunătățirea semnificativă a performanței generale a sistemului.

 

Tipuri de funcții

Funcții încorporate

MySQL vine la pachet cu o serie de funcții încorporate. Funcțiile încorporate sunt pur și simplu funcții care sunt deja implementate în serverul MySQL. Aceste funcții ne permit să efectuăm diferite tipuri de manipulări asupra datelor. Funcțiile încorporate pot fi, practic, clasificate în următoarele categorii cele mai utilizate.

  • Funcții șiruri – operează pe tipuri de date șiruri
  • Funcții numerice – operează pe tipuri de date numerice
  • Funcții de dată – operează pe tipuri de date de date
  • Funcții agregate – operează pe toate tipurile de date de mai sus și produc seturi de rezultate rezumate.
  • Alte funcții – MySQL acceptă și alte tipuri de funcții încorporate, dar ne vom limita lecția doar la funcțiile menționate mai sus.

 

Să ne uităm acum la fiecare dintre funcțiile menționate mai sus în detaliu. Vom explica cele mai utilizate funcții folosind „Myflixdb”.

 

Funcții șiruri

Ne-am uitat deja la ce fac funcțiile șir. Ne vom uita la un exemplu practic care le folosește. În tabelul nostru de filme, titlurile filmelor sunt stocate folosind combinații de litere mici și mari. Să presupunem că vrem să obținem o listă de interogări care returnează titlurile filmelor cu litere mari. Putem folosi funcția „UCASE” pentru a face asta. Ia un șir ca parametru și convertește toate literele în majuscule. Scriptul prezentat mai jos demonstrează utilizarea funcției „UCASE”.

SELECTAȚI `movie_id`,`title`, UCASE(`title`) FROM `movies`;

 

  • UCASE(`title`) este funcția încorporată care ia titlul ca parametru și îl returnează cu litere mari cu numele de alias `upper_case_title`.

 

Executarea scriptului de mai sus în MySQL workbench împotriva Myflixdb ne oferă următoarele rezultate prezentate mai jos.

movie_id

titlu

UCASE('titlu')

16

67% vinovat

67% VINOVAȚI

6

ingeri si Demoni

INGERI SI DEMONI

4

Nume cod Negru

NUME COD NEGRU

5

Fetițele lui Tati

FETIILE LUI TATIC

7

Codul Davinci

COD DAVINCI

2

Uitând-o pe Sarah Marshal

UITÂND-O pe Sarah MARSHAL

nouă

Luna de miere

LUNA DE MIERE

19

filmul 3

FILMUL 3

1

Piratii din Caraibe 4

PIRAȚII DIN CARIBE 4

optsprezece

exemplu de film

MOSTRA DE FILM

17

Marele Dictator

MARELE DICTATOR

3

X-Men

X-MEN

 

 

MySQL acceptă o serie de funcții șir. Pentru o listă completă a tuturor funcțiilor string încorporate, consultați acest link http://dev.mysql.com/doc/refman/5.0/en/string-functions.html pe site-ul MySQL.

 

Funcții numerice

După cum am menționat mai devreme, aceste funcții operează pe tipuri de date numerice. Putem efectua calcule matematice pe date numerice din instrucțiunile SQL.

 

Operatori aritmetici

MySQL acceptă următorii operatori aritmetici care pot fi utilizați pentru a efectua calcule în instrucțiunile SQL.

Nume

Descriere

DIV

Diviziune intregi

/

Divizia

-

Scădere

+

Plus

*

Multiplicare

% sau MOD

Modulul

 

Să ne uităm acum la exemple ale fiecărui operator de mai sus

 

Diviziune întreagă (DIV)

SELECT 23 DIV 6 ;

Executarea scriptului de mai sus ne oferă următoarele rezultate.

3

 

Operator de divizie (/)

Să ne uităm acum la exemplul de operator de diviziune. Vom modifica exemplul DIV.

SELECTARE 23 / 6 ;

Executarea scriptului de mai sus ne oferă următoarele rezultate.

3,8333

 

Operatorul de scădere (-)

Să ne uităm acum la exemplul de operator de scădere. Vom folosi aceleași valori ca în cele două exemple precedente

SELECTARE 23 - 6 ;

Executarea scriptului de mai sus ne dă 17

 

Operator de adăugare (+)

Să ne uităm acum la exemplul de operator de adăugare. Vom modifica exemplul anterior.

SELECTARE 23 + 6 ;

Executarea scriptului de mai sus ne dă 29

 

Operator de multiplicare (*)

Să ne uităm acum la exemplul de operator de multiplicare. Vom folosi aceleași valori ca în exemplele anterioare.

SELECT 23 * 6 AS `rezultat_multiplicare`;

 

Executarea scriptului de mai sus ne oferă următoarele rezultate.

multiplicare_rezultat

138

 

Modul operator (-)

Operatorul modulo împarte N la M și ne dă restul. Să ne uităm acum la exemplul de operator modulo. Vom folosi aceleași valori ca în exemplele anterioare.

SELECTARE 23 % 6 ;

SAU

SELECT 23 MOD 6 ;

 

Executarea scriptului de mai sus ne oferă 5

Să ne uităm acum la unele dintre funcțiile numerice comune din MySQL.

Etaj – această funcție elimină zecimale dintr-un număr și îl rotunjește la cel mai apropiat număr. Scriptul prezentat mai jos demonstrează utilizarea acestuia.

SELECT FLOOR(23 / 6) AS `floor_result`;

 

Executarea scriptului de mai sus ne oferă următoarele rezultate.

etaj_rezultat

3

Round – această funcție rotunjește un număr cu zecimale la cel mai apropiat număr întreg. Scriptul prezentat mai jos demonstrează utilizarea acestuia.

SELECTARE ROUND(23 / 6) AS `rundă_rezultat`;

 

Executarea scriptului de mai sus ne oferă următoarele rezultate.

Round_result

4

Rand – această funcție este folosită pentru a genera un număr aleator, valoarea acestuia se modifică de fiecare dată când funcția este apelată. Scriptul prezentat mai jos demonstrează utilizarea acestuia.

SELECTAȚI RAND() CA `rezultat_aleatoriu`;

 

Funcții stocate

Funcțiile stocate sunt la fel ca și funcțiile încorporate, cu excepția faptului că trebuie să definiți singur funcția stocată. Odată ce o funcție stocată a fost creată, aceasta poate fi utilizată în instrucțiuni SQL la fel ca orice altă funcție. Sintaxa de bază pentru crearea unei funcții stocate este cea prezentată mai jos

CREATE FUNCTION sf_name ([parametru(i)])

   RETURNS tipul de date

   DETERMINAT

   DECLARAȚII
  • „CREATE FUNCTION sf_name ([parameter(s)]) „ este obligatoriu și îi spune serverului MySQL să creeze o funcție numită `sf_name' cu parametri opționali definiți în paranteză.
  • „RETURNS data type” este obligatoriu și specifică tipul de date pe care funcția ar trebui să-l returneze.
  • „DETERMINISTIC” înseamnă că funcția va returna aceleași valori dacă îi sunt furnizate aceleași argumente.
  • „DECLARAȚII” este codul procedural pe care îl execută funcția.

 

Să ne uităm acum la un exemplu practic care implementează o funcție încorporată. Să presupunem că vrem să știm ce filme închiriate au trecut de data de întoarcere. Putem crea o funcție stocată care acceptă data de returnare ca parametru și apoi o compară cu data curentă în serverul MySQL. Dacă data curentă este mai mică decât data de întoarcere a filmului, atunci revenim „Nu”, altfel revenim „Da”. Scriptul prezentat mai jos ne ajută să realizăm acest lucru.

DELIMITOR |

CREATE FUNCTION sf_past_movie_return_date (return_date DATE)

  RETURNĂ VARCHAR(3)

   DETERMINAT

    ÎNCEPE

     DECLARE sf_value VARCHAR(3);

        IF curdate() > return_date

            THEN SET sf_value = 'Da';

        ELSEIF curdate() <= return_date

            THEN SET sf_value = 'Nu';

        END IF;

     RETURN sf_value;

    SFÂRȘIT|

 

Executarea scriptului de mai sus a creat funcția stocată `sf_past_movie_return_date`.

Să testăm acum funcția noastră stocată.

SELECTează `movie_id`,`membership_number`,`return_date`,CURDATE() ,sf_past_movie_return_date(`return_date`) DIN `movierentals`;

 

Executarea scriptului de mai sus în MySQL workbench împotriva myflixdb ne oferă următoarele rezultate.

movie_id

numar de membru

data_return

CURDATE ()

sf_past_movie_return_date('return_date')

1

1

NUL

04-08-2012

NUL

2

1

25-06-2012

04-08-2012

da

2

3

25-06-2012

04-08-2012

da

2

2

25-06-2012

04-08-2012

da

3

3

NUL

04-08-2012

NUL

 

 

Funcții definite de utilizator

MySQL acceptă și funcții definite de utilizator care extind MySQL. Funcțiile definite de utilizator sunt funcții pe care le puteți crea folosind un limbaj de programare precum C, C++ etc. și apoi le puteți adăuga la serverul MySQL. Odată adăugate, acestea pot fi folosite la fel ca orice altă funcție.

Distribuie: