深入了解MySQL字符串比較函數(shù)
MySQL字符串比較函數(shù)函數(shù)我們經(jīng)常會用到,下面就對MySQL字符串比較函數(shù)的用法作了很詳細的介紹分析,希望對您學(xué)習(xí)MySQL字符串比較函數(shù)方面能有所啟迪。
根據(jù),MySQL 會自動將數(shù)字轉(zhuǎn)化為字符串,反之亦然。
mysql> SELECT 1+''1'';-> 2mysql> SELECT CONCAT(2,'' test'');-> ''2 test''
若想要將數(shù)字明確地轉(zhuǎn)化為字符串,可使用 CAST()或 CONCAT()函數(shù):
mysql> SELECT 38.8, CAST(38.8 AS CHAR);-> 38.8, ''38.8''mysql> SELECT 38.8, CONCAT(38.8);-> 38.8, ''38.8''
CAST() 比較可取。
若已經(jīng)對一個字符串函數(shù)給定一個二進制字符串作為參數(shù), 則所得到的結(jié)果字符串也是一個二進制字符串。一個轉(zhuǎn)化為字符串的數(shù)字被作為二進制字符串對待。這僅會對比較結(jié)果產(chǎn)生影響。
一般而言, 若字符串比較中任意一個表達式是區(qū)分大小寫的,則執(zhí)行比較時也區(qū)分大小寫。
◆ expr LIKE pat [ESCAPE ''escape-char'']
模式匹配,使用SQL簡單正規(guī)表達式比較。返回1 (TRUE) 或 0 (FALSE)。 若 expr 或 pat 中任何一個為 NULL,則結(jié)果為 NULL。
模式不需要為文字字符串。例如,可以被指定為一個字符串表達式或表列。
在模式中可以同LIKE一起使用以下兩種通配符:
mysql> SELECT ''David!'' LIKE ''David_'';-> 1mysql> SELECT ''David!'' LIKE ''%D%v%'';-> 1
若要對通配符的文字實例進行檢驗, 可將轉(zhuǎn)義字符放在該字符前面。如果沒有指定 ESCAPE字符, 則假設(shè)為‘\’。
mysql> SELECT ''David!'' LIKE ''David\_'';-> 0mysql> SELECT ''David_'' LIKE ''David\_'';-> 1
要指定一個不同的轉(zhuǎn)義字符,可使用ESCAPE語句:
mysql> SELECT ''David_'' LIKE ''David|_'' ESCAPE ''|'';-> 1
轉(zhuǎn)義序列可以為空,也可以是一個字符的長度。 從 MySQL 5.1.2開始, 如若 NO_BACKSLASH_ESCAPES SQL模式被激活, 則該序列不能為空。
以下兩個語句舉例說明了字符串比較不區(qū)分大小寫,除非其中一個操作數(shù)為二進制字符串:
mysql> SELECT ''abc'' LIKE ''ABC'';-> 1mysql> SELECT ''abc'' LIKE BINARY ''ABC'';-> 0
在MySQL中, LIKE 允許出現(xiàn)在數(shù)字表達式中。 (這是標(biāo)準SQL LIKE 的延伸)。
mysql> SELECT 10 LIKE ''1%'';-> 1
注釋: 由于 MySQL在字符串中使用 C轉(zhuǎn)義語法(例如, 用‘ ’代表一個換行字符),在LIKE字符串中,必須將用到的‘\’雙寫。例如, 若要查找 ‘ ’, 必須將其寫成 ‘’。而若要查找 ‘\’, 則必須將其寫成 it as ‘\\\\’;原因是反斜線符號會被語法分析程序剝離一次,在進行模式匹配時,又會被剝離一次,最后會剩下一個反斜線符號接受匹配。
◆ expr NOT LIKE pat [ESCAPE ''escape-char'']
這相當(dāng)于 NOT (expr LIKE pat [ESCAPE ''escape-char''])。
◆ expr NOT REGEXP pat expr NOT RLIKE pat
這相當(dāng)于NOT (expr REGEXP pat)。
◆ expr REGEXP pat expr RLIKE pat
執(zhí)行字符串表達式 expr 和模式pat 的模式匹配。該模式可以被延伸為正規(guī)表達式。正規(guī)表達式的語法在附錄G:MySQL正則表達式中有詳細討論。若expr 匹配 pat,則返回 1; 否則返回0。若 expr 或 pat 任意一個為 NULL, 則結(jié)果為 NULL。 RLIKE 是REGEXP的同義詞, 作用是為mSQL 提供兼容性。
模式不需要為文字字符串。例如,可以被指定為一個字符串表達式或表列。
注釋:由于在字符串中, MySQL使用 C 轉(zhuǎn)義語法 (例如, 用‘ ’來代表換行字符 ),在REGEXP字符串中必須將用到的‘\’ 雙寫。
REGEXP 不區(qū)分大小寫, 除非將其同二進制字符串同時使用。
mysql> SELECT ''Monty!'' REGEXP ''m%y%%'';-> 0mysql> SELECT ''Monty!'' REGEXP ''.*'';-> 1mysql> SELECT ''new* *line'' REGEXP ''new\\*.\\*line'';-> 1mysql> SELECT ''a'' REGEXP ''A'', ''a'' REGEXP BINARY ''A'';-> 1 0mysql> SELECT ''a'' REGEXP ''^[a-d]'';-> 1
在確定字符類型時,REGEXP 和 RLIKE 使用當(dāng)前字符集 (默認為cp1252 Latin1 )。 警告:這些操作符不支持多字節(jié)字元。
◆ STRCMP(expr1,expr2)
若所有的字符串均相同,則返回STRCMP(),若根據(jù)當(dāng)前分類次序,第一個參數(shù)小于第二個,則返回 -1,其它情況返回 1 。
mysql> SELECT STRCMP(''text'', ''text2'');-> -1mysql> SELECT STRCMP(''text2'', ''text'');-> 1mysql> SELECT STRCMP(''text'', ''text'');-> 0
在執(zhí)行比較時,STRCMP() 使用當(dāng)前字符集。這使得默認的比較區(qū)分大小寫,當(dāng)操作數(shù)中的一個或兩個都是二進制字符串時除外。
【編輯推薦】