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



