SQL 單一長度的任意字元



2013-06-14_111149

這是MySQL 5實力養成暨評量裡的3-47.『SQL語法中,哪一個符號代表單一長度的任意字元?』

答案:(C)_

看來ㄚ琪把?跟_記錯了,才會出錯,所以我們再好好複習一次加強記憶,讀者可以參考MySQL 5.7 Reference Manual :: 12 Functions and Operators :: 12.5 String Functions :: 12.5.1 String Comparison Functions

MySQL 5.1参考手册 :: 12. 函数和操作符::12.3. 字符串函数::12.3.1. 字符串比较函数

轉譯繁體中文如下:

根據, 會自動將數字轉化為字串,反之亦然。

mysql> SELECT 1+’1′;

-> 2

mysql> SELECT CONCAT(2,’ test’);

-> ’2 test’

若想要將數字明確地轉化為字串,可使用 CAST()或 CONCAT()函數:

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() 比較可取。.

若已經對一個字串函數給定一個二進制字串作為參數, 則所得到的結果字串也是一個二進制字串。一個轉化為字串的數字被作為二進制字串對待。這僅會對比較結果產生影響。

一般而言, 若字串比較中任意一個資料表達式是區分大小寫的,則執行比較時也區分大小寫。

  • expr  pat [ESCAPE ‘escape-char‘]

模式匹配,使用SQL簡單正規資料表達式比較。返回1 (TRUE) 或 0 (FALSE)。 若 expr 或 pat 中任何一個為NULL,則結果為 NULL。

模式不需要為文字字串。例如,可以被指定為一個字串資料表達式或資料表列。

在模式中可以同LIKE一起使用以下兩種通配符:

字元 說明
% 匹配任何數目的字元,甚至包括零字元
_ 只能匹配一種字元

mysql> SELECT ‘David!’ LIKE ‘David_’;

-> 1

mysql> SELECT ‘David!’ LIKE ‘%D%v%’;

-> 1

若要對通配符的文字實例進行檢驗, 可將轉義字元放在該字元前面。如果沒有指定 ESCAPE字元, 則假設為『\』。

字串 說明
\% 匹配一個 『%』字元
\_ 匹配一個 『_』 字元

mysql> SELECT ‘David!’ LIKE ‘David\_’;

-> 0

mysql> SELECT ‘David_’ LIKE ‘David\_’;

-> 1

要指定一個不同的轉義字元,可使用ESCAPE語句:

mysql> SELECT ‘David_’ LIKE ‘David|_’ ESCAPE ‘|’;

-> 1

轉義序列可以為空,也可以是一個字元的長度。 從 MySQL 5.1.2開始,如若 NO_BACKSLASH_ESCAPES SQL模式被激活,則該序列不能為空。

以下兩個語句舉例說明了字串比較不區分大小寫,除非其中一個操作數為二進制字串:

mysql> SELECT ‘abc’ LIKE ‘ABC’;

-> 1

mysql> SELECT ‘abc’ LIKE BINARY ‘ABC’;

-> 0

在MySQL中,LIKE 允許出現在數字資料表達式中。 (這是標準SQL LIKE 的延伸)。

mysql> SELECT 10 LIKE ’1%’;

-> 1

註釋: 由於 MySQL在字串中使用 C轉義語法(例如, 用『\n』代資料表一個換行字元),在LIKE字串中,必須將用到的『\』雙寫。例如, 若要搜尋 『\n』, 必須將其寫成 『\\n』。而若要搜尋 『\』, 則必須將其寫成 it as『\\\\』;原因是反斜線符號會被語法分析程式剝離一次,在進行模式匹配時,又會被剝離一次,最後會剩下一個反斜線符號接受匹配。

  • expr NOT LIKE pat [ESCAPE ‘escape-char‘]

這相當於 NOT (expr LIKE pat [ESCAPE ‘escape-char‘])。

  • expr NOT REGEXP pat expr NOT RLIKE pat

這相當於NOT (expr REGEXP pat)。

  • expr REGEXP pat expr RLIKE pat

執行字串資料表達式 expr 和模式pat 的模式匹配。該模式可以被延伸為正規資料表達式。正規資料表達式的語法在附錄G:MySQL正則資料表達式中有詳細討論。若expr 匹配 pat,則返回 1; 否則返回0。若 expr 或 pat 任意一個為 NULL,則結果為 NULL。 RLIKE 是REGEXP的同義詞,作用是為mSQL 提供相容性。

模式不需要為文字字串。例如,可以被指定為一個字串資料表達式或資料表列。

註釋:由於在字串中, MySQL使用 C 轉義語法 (例如,用『\n』來代資料表換行字元 ),在REGEXP字串中必須將用到的『\』 雙寫。

REGEXP 不區分大小寫,除非將其同二進制字串同時使用。

mysql> SELECT ‘Monty!’ REGEXP ‘m%y%%’;

-> 0

mysql> SELECT ‘Monty!’ REGEXP ‘.*’;

-> 1

mysql> SELECT ‘new*\n*line’ REGEXP ‘new\\*.\\*line’;

-> 1

mysql> SELECT ‘a’ REGEXP ‘A’, ‘a’ REGEXP BINARY ‘A’;

-> 1  0

mysql> SELECT ‘a’ REGEXP ‘^[a-d]‘;

-> 1

在確定字元類型時,REGEXP 和 RLIKE 使用當前字元編碼 (預設為cp1252 Latin1 )。 警告:這些操作符不支援多字節字元。

  • STRCMP(expr1,expr2)

若所有的字串均相同,則返回STRCMP(),若根據當前分類次序,第一個參數小於第二個,則返回  -1,其它情況返回 1 。

mysql> SELECT STRCMP(‘text’, ‘text2′);

-> -1

mysql> SELECT STRCMP(‘text2′, ‘text’);

-> 1

mysql> SELECT STRCMP(‘text’, ‘text’);

-> 0

在執行比較時,STRCMP() 使用當前字元編碼。這使得預設的比較區分大小寫,當操作數中的一個或兩個都是二進制字串時除外。

Print Friendly, PDF & Email

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料