Documente Academic
Documente Profesional
Documente Cultură
SGBD
Grigore Vasilache
TEMA NR. 14. OPERAII I FUNCII N MYSQL ....................................................................................... 1
14.1.
14.2.
14.3.
14.4.
14.5.
14.6.
14.7.
CFBC
SGBD
Grigore Vasilache
CFBC
SGBD
Grigore Vasilache
funcie
abs(x)
sign(x)
log(b, x)
2.
3.
4.
Descriere
5.
log10(x)
6.
7.
8.
9.
log2(x)
exp(x)
ceiling(x)
floor(x)
10.
11.
12.
13.
14.
mod(n,m), %
Restul mpririi
mod(x,y)
greatest(x,y,...)
pow(x,y),
power(x,y)
x la puterea y
str
15.
least(x,y,...)
Exemple
mysql>SELECT ABS(2); -> 2
mysql>SELECT ABS(-32); -> 32
mysql> SELECT SIGN(-32); -> -1
mysql> SELECT SIGN(0); -> 0
mysql> SELECT SIGN(234); -> 1
mysql>SELECT LN(2); -> 0.693147
mysql>SELECT LN(-2); -> NULL
mysql>SELECT LOG(2);->0.693147
mysql>SELECT LOG(2,65536); -> 16.000000
mysql>SELECT LOG10(2); -> 0.301030
mysql>SELECT LOG10(100); -> 2.000000
mysql>SELECT LOG10(-100); -> NULL
mysql>SELECT LOG2(65536); -> 16.000000
mysql>SELECT LOG2(-100); -> NULL
mysql>SELECT EXP(2); -> 7.389056
mysql>SELECT EXP(-2); -> 0.135335
mysql>SELECT CEILING(1.23); -> 2
mysql>SELECT CEILING(-1.23); -> -1
mysql>SELECT FLOOR(1.23); -> 1
mysql>SELECT FLOOR(-1.23); ->-2
mysql>SELECT MOD(234, 10); -> 4
mysql>SELECT 253 % 7; -> 1
mysql>SELECT MOD(29,9); -> 2
Pagina3din14
CFBC
SGBD
16.
17.
sqrt(x)
square
18.
rand(x)
round(x)
round(x,d)
21.
truncate(x,d)
22.
23.
24.
25.
26.
19.
20.
Grigore Vasilache
Trunchiaz un numr la un
anumit numr de zecimale
27.
pi()
mysql>SELECT DEGREES(PI());
-> 180.000000
mysql>SELECT RADIANS(90);
-> 1.570796
mysql>SELECT PI(); -> 3.141593
mysql>SELECT PI()+0.000000000000000000;
-> 3.141592653589793116
Nr.
1
2
1
Descriere
ascii(s)
bin(n)
bit_length(str)
char(n)
concat(s1, s2)
concat_ws
(separator, str1, str2,...)
Concatenarea cu separator
Pagina4din14
Exemple
mysql>SELECT ASCII('2'); -> 50
mysql>SELECT ASCII(2); -> 50
mysql>SELECT ASCII('dx'); -> 100
mysql>SELECT ORD('2'); -> 50
mysql>SELECT BIN(12); -> '1100'
mysql>SELECT BIT_LENGTH('text'); -> 32
mysql>SELECT CHAR(77,121,83,81,'76');
-> 'MySQL'
mysql>SELECT CHAR(65,66); -> 'AB'
mysql>SELECT CONCAT('My', 'S', 'QL');
-> 'MySQL'
mysql>SELECT CONCAT('My', NULL, 'QL'); >NULL
mysql>SELECT CONCAT(14.3); -> '14.3'
mysql>SELECT CONCAT_WS(",","First
name","Second name","Last Name");
-> 'First name,Second name,Last Name'
mysql>SELECT CONCAT_WS(",","First
CFBC
SGBD
conv
(n,from_base,to_base)
elt(n,str1,str2,str3,...)
field(str,str1,str2,str3,...)
find_in_set(str,strlist)
hex(n)
reverse(str)
right(s,n)
right(str,len)
rpad(s1,n,s2)
Pagina5din14
Grigore Vasilache
name",NULL,"Last Name");
-> 'First name,Last Name'
mysql>SELECT CONV("a",16,2); ->'1010'.
mysql>SELECT CONV("6E",18,8); -> '172'
mysql>SELECT CONV(-17,10,-18); -> '-H'
mysql>SELECT ELT(1, 'ej', 'Heja', 'hej', 'foo');
-> 'ej'
mysql>SELECT ELT(4, 'ej', 'Heja', 'hej', 'foo');
-> 'foo'
mysql>SELECT FIELD('ej', 'Hej', 'ej', 'Heja',
'hej', 'foo');
-> 2
mysql>SELECT FIELD('fo', 'Hej', 'ej', 'Heja',
'hej', 'foo');
-> 0
mysql>SELECT FIND_IN_SET('b','a,b,c,d');
-> 2
mysql>SELECT HEX(255); -> 'FF'
mysql>SELECT INSERT('Quadratic', 3, 4,
'What'); -> 'QuWhattic'
mysql>SELECT INSTR('foobarbar', 'bar'); -> 4
mysql>SELECT INSTR('xbar', 'foobar'); -> 0
mysql>SELECT LCASE
('QUADRATICALLY');-> 'quadratically'
mysql>SELECT LEFT('foobarbar', 5);
-> 'fooba'
mysql>SELECT LENGTH('text'); -> 4
mysql>SELECT OCTET_LENGTH('text'); -> 4
CFBC
SGBD
Grigore Vasilache
space(n)
substring(str,pos,len),
substring(str from pos
- Sub-sir al lui s, care ncepe de la
for len),
poziia m i care are lungimea n
mid(str,pos,len)
substring_index
(str,delim,count)
trim([[both | leading
| trailing]
[remstr] from] str)
trim(s)
CFBC
SGBD
Funcie
Nr.
curdate(), current_date
curtime(), current_time
dayname(date)
Descriere
Returneaz data curent n formatul
YYYY-MM-DD sau YYYYMMDD, n
dependen de contextul folosirii
funciei ir de caractere sau numeric
Returneaz ora curent n formatul
HH:MM:SS sau HHMMS
second(t)
time_to_sec(time)
to_days(date)
Exemple
mysql>SELECT CURDATE(); -> '1997-12-15'
mysql>SELECT CURDATE() + 0; -> 19971215
dayofmonth(d)
sec_to_time(seconds)
Grigore Vasilache
mysql>SELECT
SEC_TO_TIME(2378);
Returneaz
argumentul
seconds,
'00:39:38'
transformat n ore, minute i secunde n
mysql>SELECT SEC_TO_TIME(2378) + 0;
formatul HH:MM:SS sau HHMMSS
3938
Partea secundelor din momentul de mysql>SELECT SECOND('10:05:03'); -> 3
timp menionat (0-59)
mysql>SELECT TIME_TO_SEC('22:23:00');
Returneaz time, transformat n 80580
secunde
mysql> SELECT TIME_TO_SEC('00:39:38');
2378
Returneaz numrul zilei pentru data, mysql>SELECT TO_DAYS(950501); -> 728779
indicat n date, (Numrul de zile mysql>SELECT
TO_DAYS('1997-10-07');
Pagina7din14
->
->
->
->
->
->
CFBC
SGBD
weekday(date)
year(d)
datediff
datename
datepart
day
getdate
isdate
729669
mysql>SELECT
22:23:00'); -> 1
WEEKDAY('2009-02-17
yearweek
WEEK(date),
WEEK(date,first)
Valoarea
0
1
2
3
Grigore Vasilache
Semnificaia
Sptmna se ncepe duminic.0-53
Sptmna se ncepe luni 0-53
Sptmna se ncepe duminic. 1-53
Sptmna se ncepe luni 1-53
mysql>SELECT WEEK('1998-02-20');
mysql>SELECT WEEK('1998-02-20',0);
mysql>SELECT WEEK('1998-02-20',1);
mysql>SELECT WEEK('1998-12-31',1);
-> 7
-> 7
-> 8
-> 53
CFBC
SGBD
Grigore Vasilache
n MySQL formatul expresiei expr permite orice simbol delimitator. Dac argumentul
date este mrime de tipul DATE i operaiile posibile includ numai pri YEAR, MONTH, i
DAY (adic nu au TIME), atunci rezultatul va fi de tipul DATE. n alte cazuri - DATETIME:
mysql>SELECT "1997-12-31 23:59:59"+INTERVAL 1 SECOND;
-> 1998-01-01 00:00:00
mysql>SELECT INTERVAL 1 DAY + "1997-12-31"; -> 1998-01-01
mysql>SELECT "1998-01-01" - INTERVAL 1 SECOND;
-> 1997-12-31 23:59:59
mysql>SELECT DATE_ADD("1997-12-31 23:59:59",INTERVAL 1 SECOND);
-> 1998-01-01 00:00:00
mysql>SELECT DATE_ADD("1997-12-31 23:59:59",INTERVAL 1 DAY);
-> 1998-01-01 23:59:59
mysql>SELECT
DATE_ADD("1997-12-31
23:59:59",INTERVAL
"1:1"
MINUTE_SECOND);
-> 1998-01-01 00:01:00
mysql>SELECT
DATE_SUB("1998-01-01
00:00:00",INTERVAL
"1
1:1:1"
DAY_SECOND);
-> 1997-12-30 22:58:59
Pagina9din14
CFBC
SGBD
Grigore Vasilache
mysql>SELECT
DATE_ADD("1998-01-01
00:00:00",INTERVAL
"-1
10"
DAY_HOUR);
-> 1997-12-30 14:00:00
mysql>SELECT DATE_SUB("1998-01-02", INTERVAL 31 DAY); -> 1997-12-02
Dac intervalul indicat este prea mic - (nu include toate prile intervalului type),
MySQL presupune c lipsesc prile de interval din stnga. De exemplu, dac e indicat type
n form DAY_SECOND, atunci expresia cerut expr trebuie s conin: zile, ore, minute i
secunde. Dac indicm valoare din intervalul "1:10", MySQL presupune c lipsesc zilele i
orele, i valoarea primit indic numai minute i secunde. Combinaia "1:10"
DAY_SECOND se interpreteaz ca echivalent cu "1:10" MINUTE_SECOND. Dac la
operaiile de + i cu participarea DATE i expresii, ce conin partea de timp rezultatul l
obinem n tipul DATETIME:
mysql>SELECT DATE_ADD("1999-01-01", INTERVAL 1 DAY);
-> 1999-01-02
mysql>SELECT DATE_ADD("1999-01-01", INTERVAL 1 HOUR);
-> 1999-01-01 01:00:00
Dac folosim expresii incorecte vom obine NULL.
mysql>SELECT DATE_ADD('1998-01-30', INTERVAL 1 MONTH);
-> 1998-02-28
EXTRACT(type FROM date) Tipurile intervalelor pentru funciile EXTRACT() se folosesc
aceleai ca i la DATE_ADD() sau DATE_SUB(), dar EXTRACT() putem spune c efectueaz
extragerea crorva pri din dat, i nu operaii aritmetice.
mysql>SELECT EXTRACT(YEAR FROM "1999-07-02"); -> 1999
mysql>SELECT EXTRACT(YEAR_MONTH FROM "1999-07-02 01:02:03");->
199907
mysql>SELECT EXTRACT(DAY_MINUTE FROM "1999-07-02 01:02:03");-> 20102
DATE_FORMAT(date,format) Formateaz mrimea date conform indicaiilor n format. n
format se poate de folosit:
Indicator
Descriere
%M
Denumirea lunii
%W
Denumirea zilei sptmnii (duminic,...)
%D
Zilele lunii cu sufixul englez (0st, 1st, 2nd, 3rd...)
%Y
Anul 4 cifre
%y
Anul 2 cifre
Anul, pentru cazul cnd duminic e prima zi din sptmn. Anul 4 cifre. Se
%X, %x
folosete cu '%V' sau '%v'
%a
Numele zilelor prescurtat
%d
Ziua lunii (00..31)
Pagina10din14
CFBC
SGBD
Grigore Vasilache
%e
%m
%c
%b
%j
%H
%k
%h
%I
%l
%i
%r
%T
%S, %s
%p
%w
%U
%u
%V
%v
%%
Pagina11din14
CFBC
SGBD
Grigore Vasilache
CFBC
SGBD
Grigore Vasilache
Descriere
- Returneaz numele bazei de date deschise
- Obine o blocare a bazei de date
- Returneaz o suma de control a irului s, calculata dup algoritmul MD5
- Returneaz irul s, criptat folosind algoritmul aplicat de MySQL parolei
- Anuleaz blocarea unei baze de date
- Returneaz numele utilizatorului curent
- Returneaz numrul versiunii MySQL
ultima valoare inserata intr-un cmp 'auto_increment'
Dac expr1 nu e NULL, returneaz expr1, altfel ret. expr2mysql> select ifnull(1/0, exp 1
IFNULL(expr1,expr2)
is null);exp 1 is null
Pagina13din14
CFBC
SGBD
Pagina14din14
Grigore Vasilache