Óðîê 6.3: Íåòèïèçèðîâàííûé Îïåðàòîð ñðàâíåíèÿ â MySQL
Ãëàâíàÿ Ñòðàíèöà » Êíèãè ïî PHP » MySQL óðîêè äëÿ íà÷èíàþùèõ ñ íóëÿ » Íåòèïèçèðîâàííûé Îïåðàòîð ñðàâíåíèÿ â MySQL
Îïåðàòîðû ñðàâíåíèÿ â MySQL âîçâðàùàþò çíà÷åíèÿ 1 (èñòèííîå, TRUE), 0 (ëîæíîå, FALSE) èëè NULL (íå ïîíÿë). Ýòè ôóíêöèè ðàáîòàþò äëÿ ÷èñåë è ñòðîê. Ñòðîêè àâòîìàòè÷åñêè áóäóò ïðåîáðàçîâàíû â ÷èñëà, à ÷èñëà â ñòðîêè, åñëè ýòî íåîáõîäèìî.
MySQL âûïîëíÿåò âñå ñðàâíåíèÿ, èñïîëüçóþùèå ñëåäóþùèå ïðàâèëà:
- åñëè îäèí èëè îáà ïàðàìåòðà ðàâíû, NULL, ðåçóëüòàò ñðàâíåíèÿ òàêæå ðàâåí NULL, çà èñêëþ÷åíèåì îïåðàòîðîâ <=>;
- åñëè îáà ïàðàìåòðà â îïåðàöèè ñðàâíåíèÿ ïðåäñòàâëÿþò ñîáîé ñòðîêè, îíè ñðàâíèâàþòñÿ êàê ñòðîêè;
- åñëè îáà ïàðàìåòðà ïðåäñòàâëÿþò ñîáîé ÷èñëà, îíè ñðàâíèâàþòñÿ êàê ÷èñëà;
- øåñòíàäöàòåðè÷íûå çíà÷åíèÿ îáðàáàòûâàþòñÿ êàê äâîè÷íûå ñòðîêè, åñëè îíè íå ñðàâíèâàþòñÿ ñ ÷èñëîì;
- åñëè îäèí èç ïàðàìåòðîâ ïðåäñòàâëÿåò ñîáîé ñòîëáåö òèïà TIMESTAMP èëè DATETIME, à äðóãîé ïàðàìåòð ÿâëÿåòñÿ êîíñòàíòîé, òî îíà áóäåò ïðåîáðàçîâàíà â timestamp ïðåæäå, ÷åì ñðàâíåíèå âûïîëíÿåòñÿ;
- âî âñåõ äðóãèõ ñëó÷àÿõ ïàðàìåòðû ñðàâíèâàþòñÿ êàê ÷èñëà ñ ïëàâàþùåé çàïÿòîé (ðåàëüíûå).
Ïî óìîë÷àíèþ, ñðàâíåíèÿ ñòðîê âûïîëíåíû íåçàâèñèìî îò ðåãèñòðà ñ èñïîëüçîâàíèåì òåêóùåãî íàáîðà ñèìâîëîâ (ïî óìîë÷àíèþ ýòî ISO-8859-1 Latin1, êîòîðûé ïðåâîñõîäíî ðàáîòàåò äëÿ àíãëèéñêîãî ÿçûêà).
Ïðèìåðû íèæå èëëþñòðèðóþò ïðåîáðàçîâàíèå ñòðîê â ñîîòâåòñòâóþùèå ÷èñëà äëÿ âûïîëíåíèÿ îïåðàöèé ñðàâíåíèÿ:
mysql> SELECT 1 > "6x";
-> 0
mysql> SELECT 7 > "6x";
-> 1
mysql> SELECT 0 > "x6";
->'0
mysql> SELECT 0 = "x6";
-> 1
Ðàâíû (=):
mysql> select 1 = 0;
-> 0
mysql> select "0" = 0;
-> 1
mysql> select ”0.0' = 0;
-> 1
mysql> select '0.01' ='0;
-> 0
mysql> select ".01" = 0.01;
-> 1
He ðàâíû (<> èëè ! =):
mysql> select ".01" <> "0.01:
-> 1
mysql> select .01 <> "0.01"
-> 0
mysql> select "zapp" <> "zappp"
-> 1
Ìåíüøå, ÷åì èëè ðàâíû (<=):
mysql> select 0.1 <= 2;
-> 1
Ñòðîãî ìåíüøå, ÷åì (<):
mysql> select 2 < 2;
-> 0
Áîëüøå, ÷åì èëè ðàâíû (>=):
mysql> select 2 >= 2;
-> 1
Ñòðîãî áîëüøå, ÷åì (>):
mysql> select 2 > 2;
-> 0
Null ðàâåí (<=>):
mysql> select 1 <=> 1, NULL <=> NULL, 1 <=> NULL;
->1 1 0
IS NULL è IS NOT NULL.
Ïðîâåðÿåò, ÿâëÿåòñÿ èëè íåò çíà÷åíèå NULL:
mysql> select 1 IS NULL, 0 IS NULL, NULL IS NULL;
->0 0 1
mysql> select 1 IS NOT NULL, 0 IS NOT NULL, NULL IS NOT NULL;
->1 1 0
expr BETWEEN min AND max.
Åñëè expr áîëüøå èëè ðàâíî min, è â òî æå âðåìÿ åõðã ìåíüøå èëè ðàâíî max, òî BETWEEN âåðíåò 1, èíà÷å ýòî âîçâðàùàåò 0. Ýòî ýêâèâàëåíòíî âûðàæåíèþ (min <= expr AND expr <= max), åñëè âñå ïàðàìåòðû èìåþò òîò æå ñàìûé òèï. Ïåðâûé ïàðàìåòð (åõðã) îïðåäåëÿåò, êàê èìåííî âûïîëíÿåòñÿ ñðàâíåíèå, ñëåäóþùèì îáðàçîì:
- åñëè åõðr ïðåäñòàâëÿåò ñîáîé ñòîëáåö òèïà TIMESTAMP, DATE èëè DATETIME, òî MIN() è ÌÀÕ() ïðèâîäÿòñÿ ê òîìó æå ñàìîìó ôîðìàòó, åñëè îíè êîíñòàíòû;
- åñëè åõðr ïðåäñòàâëÿåò ñîáîé ñòðîêó, íå÷óâñòâèòåëüíóþ ê ðåãèñòðó, òî ñðàâíåíèå âûïîëíÿåòñÿ áåç ó÷åòà ðåãèñòðà;
- åñëè åõðr ïðåäñòàâëÿåò ñîáîé ñòðîêó, ÷óâñòâèòåëüíóþ ê ðåãèñòðó, òî ñðàâíåíèå âûïîëíÿåòñÿ ñ ó÷åòîì ðåãèñòðà ñèìâîëîâ;
- åñëè åõðr ïðåäñòàâëÿåò ñîáîé öåëî÷èñëåííîå âûðàæåíèå, áóäåò âûïîëíåíî öåëî÷èñëåííîå ñðàâíåíèå;
- èíà÷å, áóäåò âûïîëíåíî ñðàâíåíèå ÷èñåë ñ ïëàâàþùåé çàïÿòîé.
mysql> select 1 BETWEEN 2 AND 3;
-> 0
mysql> select "b" BETWEEN "a" AND "c";
-> 1
mysql> select 2 BETWEEN 2 AND "3";
-> 1
mysql> select 2 BETWEEN 2 AND "x-3";
-> 0
expr IN (value,...).
Âîçâðàùàåòñÿ 1, åñëè expr ïðåäñòàâëÿåò ñîáîé ëþáîå èç çíà÷åíèé â ñïèñêå IN, èíà÷å âîçâðàùàåòñÿ 0. Åñëè âñå çíà÷åíèÿ - êîíñòàíòû, òî îíè îöåíåíû ñîãëàñíî òèïó åõðr è îòñîðòèðîâàíû. Çàòåì áóöåò âûïîëíåí äâîè÷íûé ïîèñê ýëåìåíòà. Ýòî îçíà÷àåò, ÷òî IN î÷åíü áûñòð, åñëè ñïèñîê çíà÷åíèé IN ñîñòîèò ãîäíîñòüþ èç êîíñòàíò. Åñëè åõðr - ÷óâñòâèòåëüíîå ê ðåãèñòðó ñòðîêîâîå âûðàæåíèå, ñðàâíåíèå ñòðîê âûïîëíÿåòñÿ ñ ó÷åòîì ðåãèñòðà:
mysql> select 2 IN (0,3,5,'wefwf');
-> 0
mysql> select "wefwf” IN (0,3,5,'wefwf');
-> 1
expr NOT IN (value,...)
Àíàëîãè÷íî NOT (expr IN (value,...)).
ISNULL(expr).
Åñëè expr ðàâåí NULL, ISNULL() âîçâðàùàåò 1, èíà÷å ýòî âîçâðàùàåò 0:
mysql> select ISNULL(1+1);
-> 0
mysql> select ISNULL(1/0);
-> 1
Îáðàòèòå âíèìàíèå, ÷òî ñðàâíåíèå çíà÷åíèé NULL, èñïîëüçóþùèõ =, âñåãäà áóäåò ðàâíî false!
COALESCE(list).
Âîçâðàùàåò ïåðâûé íå-NULL ýëåìåíò â ñïèñêå:
mysql> select COALESCE(NULL,1);
-> 1
mysql> select COALESCE(NULL,NULL,NULL);
-> NULL
INTERVAL(N,N1,N2,N3,...)
Âîçâðàùàåò 0, åñëè N < N1, 1, åñëè N < N2 è òàê äàëåå. Âñå ïàðàìåòðû îáðàáàòûâàþòñÿ êàê öåëûå ÷èñëà. Ýòî òðåáóåò, ÷òîáû âûïîëíÿëîñü óñëîâèå: N1 < N2 < N3 < ... < Nn äëÿ ýòîé ôóíêöèè, äëÿ åå ïðàâèëüíîé ðàáîòàòû. Ýòî ïîòîìó, ÷òî ïðè ðàáîòå ôóíêöèè èñïîëüçóåòñÿ äâîè÷íûé ïîèñê (î÷åíü áûñòðûé):
mysql> select INTERVAL(23, 1, 15, 17, 30, 44, 200);
-> 3
mysql> select INTERVAL(10, 1, 10, 100, 1000);
-> 2
mysql> select INTERVAL(22, 23, 30, 44, 200);
-> 0
Åñëè âû ñðàâíèâàåòå ÷óâñòâèòåëüíóþ ê ðåãèñòðó ñòðîêó ëþáûì èç ñòàíäàðòíûõ îïåðàòîðîâ (=, <>..., íî íå LIKE), êîíå÷íûé ïðîáåë áóäåò èãíîðèðîâàòüñÿ.
mysql> select "à" = ”À";
-> 1



