流程控制函数 流程控制函数包含以下四种函数 • CASE value WHEN [compare_value] THEN result [WHEN [compare_value] THEN result ...] [ELSE result] END • 当value等于compare_value时,则返回result,否则返回else里的result, 如果没有else子句则返回null • mysql> SELECT CASE 1 WHEN 1 THEN 'one' • -> WHEN 2 THEN 'two' ELSE 'more' END; • -> 'one' • CASE WHEN [condition] THEN result [WHEN [condition] THEN result ...] [ELSE result] END • 当第一个condition满足时,则返回result,否则返回else里的result,如果 没有else子句时则返回null • mysql> SELECT CASE WHEN 1>0 THEN 'true' ELSE 'false' END; • -> 'true' • mysql> SELECT CASE BINARY 'B' • -> WHEN 'a' THEN 1 WHEN 'b' THEN 2 END; • -> NULL IF(expr1,expr2,expr3) • 当expr1为1/true时,则返回expr2,否则返回expr3 • mysql> SELECT IF(1>2,2,3); • -> 3 • mysql> SELECT IF(1<2,'yes','no'); • -> 'yes' • mysql> SELECT IF(STRCMP('test','test1'),'no','yes'); • -> 'no‘ • IFNULL(expr1,expr2) • 当expr1为非null时,则返回expr1,否则返回expr2 • mysql> SELECT IFNULL(1,0); • -> 1 • mysql> SELECT IFNULL(NULL,10); • -> 10 • mysql> SELECT IFNULL(1/0,10); • -> 10 • mysql> SELECT IFNULL(1/0,'yes'); • -> 'yes' • NULLIF(expr1,expr2) • 当expr1等于expr2时,则返回null,否则返回expr1 • mysql> SELECT NULLIF(1,1); • -> NULL • mysql> SELECT NULLIF(1,2); • -> 1 IFNULL(expr1,expr2) • 当expr1为非null时,则返回expr1,否则返回expr2 • mysql> SELECT IFNULL(1,0); • -> 1 • mysql> SELECT IFNULL(NULL,10); • -> 10 • mysql> SELECT IFNULL(1/0,10); • -> 10 • mysql> SELECT IFNULL(1/0,'yes'); • -> 'yes' • NULLIF(expr1,expr2) • 当expr1等于expr2时,则返回null,否则返回expr1 • mysql> SELECT NULLIF(1,1); • -> NULL • mysql> SELECT NULLIF(1,2); • -> 1 ASCII(str) • 返回str字符串中最左边字符的ascii码值,如果是空串则返回0,如果str是null则返回null • mysql> SELECT ASCII('2'); • -> 50 • mysql> SELECT ASCII(2); • -> 50 • mysql> SELECT ASCII('dx'); • -> 100 • CHAR(N,... [USING charset_name]) • 将括号中的N转化成ascii码对应的字符,返回这些字符组成的字符串,其中的null会被忽略 • mysql> SELECT CHAR(77,121,83,81,'76'); • -> 'MySQL' • mysql> SELECT CHAR(77,77.3,'77.3'); • -> 'MMM‘ • mysql> SELECT CHARSET(CHAR(X'65')), CHARSET(CHAR(X'65' USING utf8)); • +----------------------+---------------------------------+ • | CHARSET(CHAR(X'65')) | CHARSET(CHAR(X'65' USING utf8)) | • +----------------------+---------------------------------+ • | binary | utf8 | • +----------------------+---------------------------------+ 01 • CHAR_LENGTH(str) • 返回字符串的字符长度 • CONCAT(str1,str2,...) • 返回括号里所有参数字符串连接在一起,当其中有参数为NULL时则返回 NULL • mysql> SELECT CONCAT('My', 'S', 'QL'); • -> 'MySQL' • mysql> SELECT CONCAT('My', NULL, 'QL'); • -> NULL • mysql> SELECT CONCAT(14.3); • -> '14.3 • CONCAT_WS(separator,str1,str2,...) • 返回以第一个参数为分隔符的连接后的一个字符串,当有参数为NULL时则null 被忽略 • mysql> SELECT CONCAT_WS(',','First name','Second name','Last Name'); • -> 'First name,Second name,Last Name' • mysql> SELECT CONCAT_WS(',','First name',NULL,'Last Name'); • -> 'First name,Last Name‘ • INSERT(str,pos,len,newstr) • 将str中从pos位置开始后的len个字符替换成newstr字符串 • mysql> SELECT INSERT('Quadratic', 3, 4, 'What'); • -> 'QuWhattic' • mysql> SELECT INSERT('Quadratic', -1, 4, 'What'); • -> 'Quadratic' • mysql> SELECT INSERT('Quadratic', 3, 100, 'What'); • -> 'QuWhat' • LOAD_FILE(file_name) • 读取文件且返回文件内容为字符串 • mysql> UPDATE t • SET blob_col=LOAD_FILE('/tmp/picture') • WHERE id=1; • LOCATE(substr,str) • 返回str字符串中第一次出现substr字符串的位置,如果没有则返回null • mysql> SELECT LOCATE('bar', 'foobarbar'); • -> 4 • mysql> SELECT LOCATE('xbar', 'foobar'); • -> 0 • LOCATE(substr,str,pos) • 返回str字符串中从pos位置开始第一次出现substr字符串的位置,如果没有则返 回null • mysql> SELECT LOCATE('bar', 'foobarbar', 5); • -> 7 • LOWER(str) • 返回将str字符串中所有字符变换成小写后的字符串,但对二进制文本无 效 • mysql> SELECT LOWER('QUADRATICALLY'); • -> 'quadratically' • mysql> SET @str = BINARY 'New York'; • mysql> SELECT LOWER(@str), LOWER(CONVERT(@str USING latin1)); • +-------------+-----------------------------------+ • | LOWER(@str) | LOWER(CONVERT(@str USING latin1)) | • +-------------+-----------------------------------+ • | New York | new york | • +-------------+-----------------------------------+ • LTRIM(str) • 将str最左边的空格去掉并返回 • mysql> SELECT LTRIM(' barbar'); • -> 'barbar‘ • REPEAT(str,count) • 将str重复count并组合成字符串返回,如果count<1,则返回空串 • mysql> SELECT REPEAT('MySQL', 3); • -> 'MySQLMySQLMySQL' • REPLACE(str,from_str,to_str) • 将所有str字符串中匹配from_str子串的地方都替换成to_str子字符串 • mysql> SELECT REPLACE('www.mysql.com', 'w', 'Ww'); • -> 'WwWwWw.mysql.com‘ • REVERSE(str) • 将str字符串中的字符按照倒序组合并返回 • mysql> SELECT REVERSE('abc'); • -> 'cba‘ • RIGHT(str,len) • 将str字符串中从右边开始的len个字符返回 • mysql> SELECT RIGHT('foobarbar', 4); • -> 'rbar' RPAD(str,len,padstr) • 将字符串str从右边开始补充为padstr直到整体长度为len,如果str的长度本身大 于len,则返回str中len长度的字符串 • mysql> SELECT RPAD('hi',5,'?'); • -> 'hi???' • mysql> SELECT RPAD('hi',1,'?'); • -> 'h‘ • RTRIM(str) • 将字符串str右边的空格去掉并返回 • mysql> SELECT RTRIM('barbar '); • -> 'barbar‘ • SPACE(N) • 返回N个长度的空格组成的空字符串 • mysql> SELECT SPACE(6); SUBSTR(str,pos), SUBSTR(str FROM pos), SUBSTR(str,pos,len), SUBSTR(str FROM pos FOR len) • SUBSTRING(str,pos), SUBSTRING(str FROM pos), SUBSTRING(str,pos,len), SUBSTRING(str FROM pos FOR len) • 如果没有len参数,则返回从pos位置开始的str中的子字符串;如果有len参数,则从pos 位置开始返回str中长度为len的子字符串;如果pos为负值,则代表pos从右边开始数 • mysql> SELECT SUBSTRING('Quadratically',5); • -> 'ratically' • mysql> SELECT SUBSTRING('foobarbar' FROM 4); • -> 'barbar' • mysql> SELECT SUBSTRING('Quadratically',5,6); • -> 'ratica' • mysql> SELECT SUBSTRING('Sakila', -3); • -> 'ila' • mysql> SELECT SUBSTRING('Sakila', -5, 3); • -> 'aki' • mysql> SELECT SUBSTRING('Sakila' FROM -4 FOR 2); • -> 'ki' SUBSTRING_INDEX(str,delim,count) • 当count为正数,则返回delim出现在str字符串中第count次之前的子字符 串,如果是负数,则从右边开始计算 • mysql> SELECT SUBSTRING_INDEX('www.mysql.com', '.', 2); • -> 'www.mysql' • mysql> SELECT SUBSTRING_INDEX('www.mysql.com', '.', -2); • -> 'mysql.com‘ • UPPER(str) • 返回将str字符串中所有字符转换成大写的字符串 • mysql> SELECT UPPER('Hej'); • -> 'HEJ‘