-- 字符串函数
-- 1. length() -- 长度函数
/**
注意事项
1.必须要有参数
2.参数不能为 null 或null值表达式
3.中文根据具体环境 ,一般情况utf8下 一个中文对应3个字符
*/
SELECT LENGTH(); -- error , native function
SELECT LENGTH(123); -- 3
SELECT LENGTH(NULL); -- null
SELECT LENGTH('中a'); -- tf8 下 4(utf8下一个汉字三个字节) gbk下3
SELECT LENGTH(NULL+'tom'); -- null
SELECT LENGTH(1+'a'); -- 1
SELECT LENGTH(1+'123'); -- 3
SELECT LENGTH(`name`) FROM ms_nick;
-- 2. concat() -- 连接函数
/**
注意事项
1.参数不可为空
2.参数不可为 null 或 null值表达式 -- 无意义
3、参数可以任意多个
返回结果为连接参数产生的字符串。如有任何一个参数为NULL ,则返回值为 NULL。
*/
SELECT CONCAT(); -- error , native function
SELECT CONCAT(NULL); -- null
SELECT CONCAT(123); -- 123
SELECT CONCAT(123,25); -- 12325
SELECT CONCAT(123,NULL); -- NULL
SELECT CONCAT(123,'tom','456'); -- 123tom456
-- 带连接符的 CONCAT_WS(separator,str1,str2,...)
SELECT * FROM emp WHERE NAME LIKE CONCAT('%','tomcat','%');
-- 返回字符串 str 中子字符串的第一个出现位置。 没有则返回0
SELECT INSTR('abc','a'); -- 1
SELECT INSTR('abc','v'); -- 0
-- 填充函数
-- LPAD(str,len,padstr) 返回字符串 str, 其左边由字符串padstr 填补到len 字符长度。
-- 假如str 的长度大于len, 则返回值被缩短至 len 字符。
-- RPAD(str,len,padstr) 返回字符串str, 其右边被字符串 padstr填补至len 字符长度。
-- 假如字符串str 的长度大于 len,则返回值被缩短到与 len 字符相同长度。
SELECT LPAD('1200',5,'*'); -- *1200
SELECT LPAD('1200',3,'*'); -- 120
SELECT RPAD('1200',5,'*'); -- 1200*
SELECT RPAD('1200',3,'*'); -- 120
-- REPEAT(str,count)
-- 返回一个由重复的字符串str 组成的字符串,字符串str的数目等于count 。
-- 若 count <= 0,则返回一个空字符串。若str 或 count 为 NULL,则返回 NULL 。
-- 若字符是空字符 则不会进行重复操作
-- 但是 可以为 空格字符串
SELECT REPEAT('A', 3); -- AAA
SELECT REPEAT('A', -3); -- 0B
SELECT REPEAT(NULL, -3); -- null
SELECT REPEAT(NULL, 3); -- null
SELECT REPEAT('', 3); -- ''
SELECT REPEAT(' ', 3); -- ' '
SELECT LENGTH(REPEAT('', 3)); -- 0 等价于 space(3)
SELECT LENGTH(REPEAT(' ', 3)); -- 3
SELECT LENGTH(SPACE(3)); -- 3
-- 去空格函数
-- TRIM(str) 返回字符串 str ,其首尾空格字符被删除。
-- LTRIM(str) 返回字符串 str ,其左空格字符被删除。
-- RTRIM(str) 返回字符串 str ,其尾空格字符被删除。
SELECT LENGTH(TRIM(' ba ')); -- 2
SELECT LENGTH(LTRIM(' ba ')); -- 3
SELECT LENGTH(RTRIM(' ba ')); -- 3
-- 强大的trim
-- TRIM([{BOTH | LEADING | TRAILING} [remstr] FROM] str)
-- TRIM(remstr FROM str)
-- 返回字符串 str , 其中所有remstr 前缀和/或后缀都已被删除。
-- 若分类符BOTH、LEADIN或TRAILING中没有一个是给定的,则默认为BOTH 。
-- remstr 为可选项,在未指定情况下,可删除空格。
SELECT TRIM(' bar '); -- 'bar'
SELECT TRIM(LEADING 'x' FROM 'xxxbarxxx'); -- 'barxxx'
SELECT TRIM(BOTH 'x' FROM 'xxxbarxxx'); -- 'bar'
SELECT TRIM( 'x' FROM 'xxxbarxxx'); -- 'bar'
SELECT TRIM(TRAILING 'xyz' FROM 'barxxyz'); -- 'barx'
-- 替换函数
-- REPLACE(str,from_str,to_str)
-- 返回字符串str 以及所有被字符串to_str替代的字符串from_str 。
-- 会替换所有匹配的内容
SELECT REPLACE('www.mysql.com', 'w', 'T'); -- TTT.mysql.com
-- 替换的字符将作为一个整体
SELECT REPLACE('www.mysql.com', 'ww', 'T'); -- Tw.mysql.com
-- 不存在则不变
SELECT REPLACE('www.mysql.com', 'wws', 'b'); -- www.mysql.com
-- 截取函数
-- RIGHT(str,len) 从字符串str 开始,返回最右len 字符。
-- LEFT(str,len) 从字符串str 开始,返回最左len 字符。
SELECT RIGHT('mysql', 3); -- sql
SELECT RIGHT('mysql', 5); -- mysql
SELECT RIGHT('mysql', 6); -- mysql
SELECT RIGHT('mysql', 0); -- 空字符串
SELECT RIGHT('mysql', -1); -- 空字符串
SELECT LEFT('mysql', 2); -- my
SELECT LEFT('mysql', 5); -- mysql
SELECT LEFT('mysql', 6); -- mysql
SELECT LEFT('mysql', 0); -- 空字符串
SELECT LEFT('mysql', -1); -- 空字符串
-- SUBSTRING(str,pos) , -- str 被截取的字符串 pos 开始截取的位置
-- SUBSTRING(str FROM pos) -- 等价于上面
-- SUBSTRING(str,pos,len) , -- str 被截取的字符串 pos 开始截取的位置 len 截取的长度
-- SUBSTRING(str FROM pos FOR len) -- 等价于上面
-- 不带有len 参数的格式从字符串str返回一个子字符串,起始于位置 pos。
-- 带有len参数的格式从字符串str返回一个长度同len字符相同的子字符串,起始于位置 pos。
-- 使用 FROM的格式为标准 SQL 语法。也可能对pos使用一个负值。
-- 假若这样,则子字符串的位置起始于字符串结尾的pos 字符,而不是字符串的开头位置。
-- 在以下格式的函数中可以对pos 使用一个负值。
SELECT SUBSTRING('tomcat',4); -- cat
SELECT SUBSTRING('tomcat' FROM 4); -- cat
SELECT SUBSTRING('tomcat',4,2); -- ca
SELECT SUBSTRING('tomcat' FROM 4 FOR 2); -- ca
-- 注意,
-- substr 等价于substring
-- pos 是可以为负值 顺序为逆序
-- 如果对len使用的是一个小于1的值,则结果始终为空字符串。
SELECT SUBSTRING('tomcat',-4); -- mcat
SELECT SUBSTR('tomcat',-4); -- mcat
SELECT SUBSTRING('tomcat',-4,2); -- mc
SELECT SUBSTRING('tomcat',-4,-2); -- 空字符串
-- REVERSE(str) 反转函数
-- 返回字符串 str ,顺序和字符顺序相反。
SELECT REVERSE('abcd'); -- dcba
SELECT REVERSE(NULL); -- null
-- 大小写转换
-- UPPER(str)
SELECT UPPER('tom'); -- TOM
SELECT LOWER('TOM'); -- tom
-- 'tomcat' 首字母转换为大写
SELECT CONCAT(UPPER(LEFT('tomcat',1)),SUBSTR('tomcat',2)) AS res;