Íàâèãàöèÿ

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

Ïàðòíåðû

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

Ñòàòèñòèêà

Óðîê 6.7: Ôóíêöèè ñðàâíåíèÿ ñòðîê â MySQL

Ãëàâíàÿ Ñòðàíèöà » Êíèãè ïî PHP » MySQL óðîêè äëÿ íà÷èíàþùèõ ñ íóëÿ » Ôóíêöèè ñðàâíåíèÿ ñòðîê â MySQL

Îáû÷íî, åñëè ëþáîå âûðàæåíèå ïðè ñðàâíåíèè ñòðîê ÷óâñòâèòåëüíî ê ðåãèñòðó, òî âñå ñðàâíåíèå âûïîëíÿåòñÿ â ðåæèìå ÷óâñòâèòåëüíîñòè ê ðåãèñòðó ñèìâîëîâ.

expr LIKE pat [ESCAPE "escape-char"]

Ñîîòâåòñòâèå, èñïîëüçóþùåå ïðîñòîå ðåãóëÿðíîå ñðàâíåíèå âûðàæåíèÿ SQL. Âîçâðàùàåò 1 (TRUE) èëè Î (FALSE). Ñ ïîìîùüþ LIKE âû ìîæåòå èñïîëüçîâàòü ñëåäóþùèå äâà ãðóïïîâûõ ñèìâîëà â çàäàâàåìîì îáðàçöå (òàáëèöà 6.2):

Òàáëèöà 6.2. Ãðóïïîâûå ñèìâîëû äëÿ like äëÿ MySQL

% Ñîîòâåòñòâóåò ëþáîìó ÷èñëó ñèìâîëîâ
_ Ñîîòâåòñòâóåò ñòðîãî îäíîìó ñèìâîëó
mysql> select "David!” LIKE "David_";
    -> 1
mysql> select "David!" LIKE "%D%v%";
    -> 1

×òîáû ðàáîòàòü ñ ãðóïïîâûìè ñèìâîëàìè èìåííî êàê ñ ñèìâîëàìè áåç ñïåöèàëüíûõ çíà÷åíèé, ýêðàíèðóéòå èõ ñèìâîëîì escape. Åñëè âû íå îïðåäåëÿåòå ñèìâîë ESCAPE, òî áóäåò ïðèíÿòî çíà÷åíèå \:

mysql> select "David!" LIKE "David\_";
    -> 0
mysql> select "David_" LIKE "David\_";
    -> 1

×òîáû îïðåäåëÿòü èíîé ñèìâîë escape, èñïîëüçóéòå ïðåäëîæåíèå ESCAPE:

mysql> select "David_" LIKE "David|_" ESCAPE "|";
    -> 1

Ñëåäóþùèå äâå èíñòðóêöèè èëëþñòðèðóþò ñðàâíåíèÿ íå÷óâñòâèòåëüíûõ ê ðåãèñòðó ñòðîê, åñëè îäèí èç îïåðàíäîâ íå ÿâëÿåòñÿ äâîè÷íîé ñòðîêîé:

mysql> select "abc" LIKE "ABC";
    -> 1
mysql> SELECT "abc" LIKE BINARY "ABC";
    -> 0

LIKE ïîçâîëÿåòñÿ íà ÷èñëîâûõ âûðàæåíèÿõ! Ýòî MySQL-ðàñøèðåíèå ANSI SQL LIKE:

mysql> select 10 LIKE "1%";
    -> 1

Ïîñêîëüêó MySQL èñïîëüçóåò Ñ-escape ñèíòàêñèñ â ñòðîêàõ (íàïðèìåð, \n), âû äîëæíû óäâîèòü ëþáîé ñèìâîë \, êîòîðûé èñïîëüçóåòå â âàøåì âûðàæåíèè LIKE. Íàïðèìåð, ÷òîáû èñêàòü \n, îïðåäåëèòå ýòî êàê \\n. ×òîáû èñêàòü \ îïðåäåëèòå ýòî êàê \\\\ (íàêëîííûå ÷åðòû âëåâî áóäóò óäàëåíû ñèíòàêñè÷åñêèì àíàëèçàòîðîì è ïîâòîðíî, êîãäà ñîîòâåòñòâèå îáðàçöà âûïîëíåíî, îñòàâëÿÿ îäèíî÷íóþ íàêëîííóþ ÷åðòó âëåâî, êîòîðàÿ áóäåò ñîãëàñîâàíà â äàííîì âûðàæåíèè).


expr NOT LIKE pat [ESCAPE "escape-char"]

Ýòî àíàëîãè÷íî âûçîâó NOT (expr LIKE pat [ESCAPE "escape-char"]).


expr REGEXP pat è expr RLIKE pat

Âûïîëíÿåò ñîîòâåòñòâèå îáðàçöà âûðàæåíèÿ ñòðîêè expr äëÿ îáðàçöà pat. Îáðàçåö ìîæåò áûòü ðàñøèðåííûì ðåãóëÿðíûì âûðàæåíèåì. Ïîäðîáíîñòè â ðàçäåëå 6. «Îïèñàíèå ñèíòàêñèñà ðåãóëÿðíûõ âûðàæåíèé MySQL». Âîçâðàùàåò 1, åñëè expr ñîîòâåòñòâóåò pat, èíà÷å âåðíåòñÿ 0.

RLIKE ïðåäñòàâëÿåò ñîáîé ñèíîíèì äëÿ REGEXP, ïðåäóñìîòðåííûé äëÿ ñîâìåñòèìîñòè ñ ÑÓÁÄ mSQL. Íà÷èíàÿ ñ MySQL 3.23.4, REGEXP íå÷óâñòâèòåëåí ê ðåãèñòðó äëÿ íîðìàëüíûõ (íå äâîè÷íûõ) ñòðîê:

mysql> select "Monty!" REGEXP "m%y%%";
    -> 0
mysql> select "Monty!" REGEXP ".*";
    -> 1
mysql> select "new**line" REGEXP "new\*.\*line";
    -> 1
mysql> select «à» REGEXP «À», «à» REGEXP BINARY «À»;
    -> 1   0
mysql> select «à» REGEXP «^[a-d]»;
    -> 1

REGEXP è RLIKE èñïîëüçóþò òåêóùèé íàáîð ñèìâîëîâ (ïî óìîë÷àíèþ çàäàí ISO-8859-1 Latin1).


expr NOT REGEXP pat è expr NOT RLIKE pat

Ýòî àíàëîãè÷íî âûçîâó NOT (expr REGEXP pat).


STRCMP(expr1,expr2)

STRCMP() âîçâðàùàåò 0, åñëè ñòðîêè îäèíàêîâûå, -1, åñëè ïåðâûé ïàðàìåòð ìåíüøå, ÷åì âòîðîé, ñîãëàñíî òåêóùåìó ïîðÿäêó ñîðòèðîâêè, èëè 1 â ïðîòèâíîì ñëó÷àå:

mysql> select STRCMP("text", "text2”);
    -> -1
mysql> select STRCMP("text2", "text");
    -> 1
mysql> select STRCMP("text", "text");
    -> 0

MATCH (col1,col2,...) AGAINST (expr)

MATCH ... AGAINST() èñïîëüçóåòñÿ äëÿ ïîëíîòåêñòîâîãî ïîèñêà è âîçâðàùàåò ðåëåâàíòíîñòü (îíà æå óìåñòíîñòü), ìåðó ïîäîáèÿ ìåæäó òåêñòîì â ñòîëáöàõ (ñîl1,ñîl2,...) è çàïðîñå expr.

Ðåëåâàíòíîñòü ïðåäñòàâëÿåò ñîáîé ïîëîæèòåëüíîå ÷èñëî ñ ïëàâàþùåé çàïÿòîé. Íóëåâîå çíà÷åíèå äàííîé âåëè÷èíû îçíà÷àåò îòñóòñòâèå ñõîæåñòè. Äëÿ ðàáîòû MATCH ... AGAINST() ñíà÷àëà äîëæåí áûòü ñîçäàí èíäåêñ FULLTEXT. Ïîäðîáíîñòè â ðàçäåëå 7. «Ñèíòàêñèñ CREATE TABLE». MATCH ... AGAINST() äîñòóïåí â MySQL 3.23.23 èëè áîëåå ïîçäíèõ. Ïîäðîáíîñòè â ðàçäåëå 9. «Ïîëíîòåêñòîâûé ïîèñê â MySQL».