12MySQL单行函数(三)字符串函数
目录
返回ASCII码值、字符数、字节数
ASCII(S)
CHAR_LENGTH(s)
LENGTH(s)
连接
CONCAT(s1,s2,......,sn)
CONCAT_WS(x,s1,s2,......,sn)
替换、索引区间替换全部替换
INSERT(str, idx, len,replacestr)
REPLACE(str, a, b)
注意:MySQL索引是从1开始的
转换成大写/小写
UPPER(s) 或 UCASE(s)
LOWER(s) 或LCASE(s)
实例:把last_name 转换成小写 小写之后 寻找 king
返回(截取)字符串、拼接字符串
LEFT(str,n)
RIGHT(str,n)
LPAD(str, len, pad)
RPAD(str ,len, pad)
去除空格(开头、结尾、开头结尾)去除字符(开头、结尾、开头结尾)
LTRIM(s)
RTRIM(s)
TRIM(s)
TRIM(s FROM s1)
TRIM(LEADING s FROMs2)
TRIM(TRAILING s FROMs2)
返回n次字符串、比较两个字符串的ASCII值、返回n次空格
REPEAT(str, n)
SPACE(n)
STRCMP(s1,s2)
返回字符串首次出现的位置 未找到返回0
SUBSTR(s,index,len)
LOCATE(substr,str)
返回指定字符串第一次出现的位置
ELT(m,s1,s2,…,sn)
FIELD(s,s1,s2,…,sn)
FIND_IN_SET(s1,s2)
反转字符串、比较两个字符串、相等返回value1,不相等返回null
注意:MySQL中,字符串的位置是从1开始的。
字符串
函数 函数 ASCII(S) 返回字符串S中的第一个字符的ASCII码值 CHAR_LENGTH(s) 返回字符串s的字符数。作用与CHARACTER_LENGTH(s)相同 LENGTH(s) 返回字符串s的字节数,和字符集有关 CONCAT(s1,s2,......,sn) 连接s1,s2,......,sn为一个字符串 CONCAT_WS(x,s1,s2,......,sn) 同CONCAT(s1,s2,...)函数,但是每个字符串之间要加上x INSERT(str, idx, len,replacestr) 将字符串str从第idx位置开始,len个字符长的子串替换为字符串replacestr REPLACE(str, a, b) 用字符串b替换字符串str中所有出现的字符串a UPPER(s) 或 UCASE(s) 将字符串s的所有字母转成大写字母 LOWER(s) 或LCASE(s) 将字符串s的所有字母转成小写字母 LEFT(str,n) 返回字符串str最左边的n个字符 RIGHT(str,n) 返回字符串str最右边的n个字符 LPAD(str, len, pad) 用字符串pad对str最左边进行填充,直到str的长度为len个字符 RPAD(str ,len, pad) 用字符串pad对str最右边进行填充,直到str的长度为len个字符 LTRIM(s) 去掉字符串s左侧的空格 RTRIM(s) 去掉字符串s右侧的空格 TRIM(s) 去掉字符串s开始与结尾的空格 TRIM(s FROM s1) 去掉字符串s开始与结尾的s1 TRIM(LEADING s FROMs2) 去掉字符串s开始处的s1 TRIM(TRAILING s FROMs2) 去掉字符串s结尾处的s1 REPEAT(str, n) 返回str重复n次的结果 SPACE(n) 返回n个空格 STRCMP(s1,s2) 比较字符串s1,s2的ASCII码值的大小 SUBSTR(s,index,len) 返回从字符串s的index位置其len个字符,
作用与SUBSTRING(s,n,len)、MID(s,n,len)相同
LOCATE(substr,str) 返回字符串substr在字符串str中首次出现的位置,
作用于POSITION(substr IN str)、INSTR(str,substr)相同。未找到,返回0
ELT(m,s1,s2,…,sn) 返回指定位置的字符串,如果m=1,则返回s1
,如果m=2,则返回s2,如 果m=n,则返回sn
FIELD(s,s1,s2,…,sn) 返回字符串s在字符串列表中第一次出现的位置 IND_IN_SET(s1,s2) 返回字符串s1在字符串s2中出现的位置。
其中,字符串s2是一个以逗号分 隔的字符串
REVERSE(s) 返回s反转后的字符串 NULLIF(value1,value2) 比较两个字符串,如果value1与value2相等,
则返回NULL,否则返回 value1
常用的字符串
返回ASCII码值、字符数、字节数
ASCII(S)
返回字符串S中的第一个字符的ASCII码值
CHAR_LENGTH(s)
返回字符串s的字符数。作用与CHARACTER_LENGTH(s)相同
LENGTH(s)
返回字符串s的字节数,和字符集有关
语句
SELECT ASCII('a'),ASCII('A');SELECT CHAR_LENGTH('string'),CHAR_LENGTH('中国');SELECT LENGTH('string'),LENGTH('中国');
结果
连接
CONCAT(s1,s2,......,sn)
连接s1,s2,......,sn为一个字符串
CONCAT_WS(x,s1,s2,......,sn)
同CONCAT(s1,s2,...)函数,但是每个字符串之间要加上x
语句1
# 连接 # 单表SELECT CONCAT (last_name,first_name) AS "姓名"FROM `employees`;SELECT CONCAT ('我叫',last_name,first_name) AS "姓名"FROM `employees`;# 多表SELECT CONCAT(emp.last_name,' worked for ',mgr.last_name) "details"FROM employees emp JOIN employees mgrWHERE emp.`manager_id` = mgr.employee_id;
结果
语句2
SELECT CONCAT_WS ('-','我叫',last_name,first_name) AS "姓名"FROM `employees`
结果
替换、索引区间替换全部替换
INSERT(str, idx, len,replacestr)
将字符串str从第idx位置开始,len个字符长的子串替换为字符串replacestr
REPLACE(str, a, b)
用字符串b替换字符串str中所有出现的字符串a
注意:MySQL索引是从1开始的
语句
SELECT INSERT('my name is zhangsan',12,18,'lisi'),REPLACE('my name is zhangsan','a','3');
结果
转换成大写/小写
UPPER(s) 或 UCASE(s)
将字符串s的所有字母转成大写字母
LOWER(s) 或LCASE(s)
将字符串s的所有字母转成小写字母
语句
SELECT UPPER('HelLo MY name WANGWU'),LOWER('HelLoMYname lilei')FROM DUAL;
结果
实例:把last_name 转换成小写 小写之后 寻找 king
# MySQL 不严谨 King 实例:把last_name 转换成小写 小写之后 寻找 king SELECT last_name,salaryFROM employeesWHERE LOWER(last_name) = 'King';
结果:
返回(截取)字符串、拼接字符串
LEFT(str,n)
返回字符串str最左边的n个字符
RIGHT(str,n)
返回字符串str最右边的n个字符
LPAD(str, len, pad)
用字符串pad对str最左边进行填充,直到str的长度为len个字符
RPAD(str ,len, pad)
用字符串pad对str最右边进行填充,直到str的长度为len个字符
语句
SELECT LEFT('my name is zhangsan',2),RIGHT('my name is zhangsan',8),LPAD('my name is zhangsan',25,'aaaaa-'),RPAD('my name is zhangsan',25,'-aaaaa');
结果
去除空格(开头、结尾、开头结尾)去除字符(开头、结尾、开头结尾)
LTRIM(s)
去掉字符串s左侧的空格
RTRIM(s)
去掉字符串s右侧的空格
TRIM(s)
去掉字符串s开始与结尾的空格
TRIM(s FROM s1)
去掉字符串s开始与结尾的s1
TRIM(LEADING s FROMs2)
去掉字符串s开始处的s1
TRIM(TRAILING s FROMs2)
去掉字符串s结尾处的s1
语句
SELECT LTRIM(' my name is zhangsan') AS '王五1', # 去掉字符串s左侧的空格RTRIM('my name is zhangsan ') AS '王五2', # 去掉字符串s右侧的空格TRIM(' my name is zhangsan ') AS '王五3', # 去掉字符串s开始与结尾的空格 TRIM('assa' FROM 'assa my name is zhangsan assa') AS '王五4', # 去掉字符串s开始与结尾的s1TRIM(LEADING 'assa' FROM 'assa my name is zhangsan assa') AS '王五5', # 去掉字符串s开始处的s1TRIM(TRAILING 'assa' FROM 'assa my name is zhangsan assa') AS '王五6'; # 去掉字符串s结尾处的s1
结果
返回n次字符串、比较两个字符串的ASCII值、返回n次空格
REPEAT(str, n)
返回str重复n次的结果
SPACE(n)
返回n个空格
STRCMP(s1,s2)
比较字符串s1,s2的ASCII码值的大小
语句
SELECT REPEAT('hello',4),LENGTH(SPACE(5)),STRCMP('abc','abe'),STRCMP('abe','abc'),STRCMP('abe','abe')FROM DUAL;
结果
返回字符串首次出现的位置 未找到返回0
SUBSTR(s,index,len)
返回从字符串s的index位置其len个字符,作用SUBSTRING(s,n,len)、MID(s,n,len)相同
LOCATE(substr,str)
返回字符串substr在字符串str中首次出现的位置,作用于POSITION(substrIN str)、INSTR(str,substr)相同。未找到,返回
语句
# 首次出现的位置 未找到返回0 SELECT SUBSTR('hello',2,2),LOCATE('lll','hello')FROM DUAL;
结果
返回指定字符串第一次出现的位置
ELT(m,s1,s2,…,sn)
返回指定位置的字符串,如果m=1,则返回s1,如果m=2,则返回s2,如果m=n,则返回sn
FIELD(s,s1,s2,…,sn)
返回字符串s在字符串列表中第一次出现的位置
FIND_IN_SET(s1,s2)
返回字符串s1在字符串s2中出现的位置。其中,字符串s2是一个以逗号分隔的字符串
语句
# ELT 返回指定的字符串 FIELD 返回第一次出现的次数SELECT ELT(2,'a','b','c','d'),FIELD('mm','gg','jj','mm','dd','mm'),FIND_IN_SET('mm','gg,mm,jj,dd,mm,gg')FROM DUAL;
结果
反转字符串、比较两个字符串、相等返回value1,不相等返回null
语句
#反转字符串SELECT REVERSE('nasgnahz si eman'); # 比较两个字符 相等 null 否则返回 value1 前面字符 返回 null SELECT employee_id,NULLIF(LENGTH(first_name),LENGTH(last_name)) "compare"FROM employees;
结果