Íàâèãàöèÿ

Ïîèñê ïî Ñàéòó

Ïàðòíåðû

Ñàìîó÷èòåëü. Êíèãè.

Ñòàòèñòèêà

Óðîê 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