字符串函数
函数 | 小写 | 用法 |
---|---|---|
ASCII(s) | 返回字符串S中的第一个字符的ASCII码值 | |
CHAR_LENGTH(s) | char_length | 返回字符串s的字符数,作用与CHARACTER_LENGTH(s)相同 |
LENGTH(s) | length | 返回字符串s的字节数,和字符集有关 |
CONCAT(s1,s2,...,sn) | concat | 连接s1,s2,...,sn为一个字符串 |
CONCAT_WS(x,s1,s2,...,sn) | 连接s1,s2,...,sn为一个字符串,每个字符串之间加上x | |
INSERT(str,index,len,repStr) | insert | 将字符串str的index位置开始len长的子串替换为字符串repStr |
REPLACE(str,a,b) | replace | 用字符串b替换字符串str中出现的所有字符串a |
UPPER(s)或UCASE(s) | uppper,case | 将字符串s所有字母转成大写 |
LOWER(s)或LCASE(s) | lower,lcase | 将字符串s所有字母转成小写 |
示例1:
SELECT ASCII('Abcdfsf'),ASCII('abcdfsf'), -- 65 97 第一个字符ASCII码值 CHAR_LENGTH('hello'),CHAR_LENGTH('我们'), -- 5 2 字符数 LENGTH('hello'),LENGTH('我们') -- 5 6 字节数 FROM DUAL;
示例2:
SELECT CONCAT(emp.last_name,' worked for ',mgr.last_name) "details" FROM employees emp JOIN employees mgr WHERE emp.`manager_id`= mgr.employee_id; SELECT CONCAT_WS('-','hello','world','hello','beijing') -- hello-world-hello-beijing FROM DUAL;
示例3:
SELECT INSERT('helloworld',2,3,'aaaa'), -- haaaaoworld 从2开始替换3个 REPLACE('hello','lol','mmm'),REPLACE('hello','llo','mmm') -- hello hemmm FROM DUAL; SELECT UPPER('Hello'), -- HELLO LOWER('Hello') -- hello FROM DUAL; SELECT last_name,salary FROM employees WHERE LOWER(last_name) = 'King';
函数 | 小写 | 用法 |
---|---|---|
LEFT(str,n) | left | 返回字符串str最左边的n个字符 |
RIGHT(str,n) | right | 返回字符串str最右边的n个字符 |
LPAD(str,len,pStr) | left padding | 用字符串pStr对str最左边进行填充,直到str的长度为len个字符 |
RPAD(str,len,pStr) | right padding | 用字符串pStr对str最右边边进行填充,直到str的长度为len个字符 |
LTRIM(s) | left trim | 去除字符串s左侧的空格 |
RTRIM(s) | right trim | 去除字符串s右侧的空格 |
TRIM(s) | trim | 去掉字符串s开始与结尾的空格 |
TRIM(s1 FROM s) | trim | 去掉字符串s开始与结尾的s1 |
TRIM(LEADING s1 FROM s) | leading 主导 | 去掉字符串s开始处的s1 |
TRIM(TRAILING s1 FROM s) | trailing 尾随 | 去掉字符串s结尾处的s1 |
示例1:
SELECT LEFT('hello',2), -- he RIGHT('hello',3),RIGHT('hello',13) -- llo hello FROM DUAL; SELECT employee_id,last_name,LPAD(salary,10,'#') FROM employees; SELECT CONCAT('---',LTRIM(' h el lo '),'***'), -- ---h el lo *** TRIM('oo' FROM 'ooheollo') -- heollo FROM DUAL;
示例2:
SELECT REPEAT('hello',3), -- hellohellohello LENGTH(SPACE(5)), -- 5 STRCMP('abc','abe') -- -1 FROM DUAL; SELECT SUBSTR('hello',2,2), -- el LOCATE('lll','hello') -- 0 FROM DUAL; SELECT ELT(2,'a','b','c','d'), -- b FIELD('mm','gg','jj','mm','dd','mm'), -- 3 FIND_IN_SET('mm','gg,mm,jj,dd,mm,gg') -- 2 FROM DUAL; SELECT employee_id,NULLIF(LENGTH(first_name),LENGTH(last_name)) "compare" FROM employees;
函数 | 小写 | 用法 |
---|---|---|
REPEAT(str,n) | repeat | 返回str重复n次的结果 |
SPACE(n) | space | 返回n个空格 |
STRCMP(s1,s2) | string compare | 比较字符串s1,s2的ASCII码值的大小 |
SUBSTR(s,index,len) | substring | 截取字符串s,从index位置开始len个字符,作用与SUBSTRING(s,n,len)、MID(s,n,len)相同 |
LOCATE(substr,str) | locate | 返回字符串substr在str首次出现的位置,作用与POSITION(substr IN str)、INSTR(str,substr)相同。未找到则返回0 |
ELT(m,s1,s2,...,sn) | Extract Load Transform | 返回指定位置的字符串,m=1返回s1;m=2返回s2;m=n返回sn |
FIELD(s,s1,s2,...,sn) | field | 返回字符串s在字符串列表中第一次出现的位置 |
FIND_IN_SET(s1,s2) | find_in_set | 返回字符串s1在字符串s2中出现的位置。其中,字符串s2是一个以逗号分隔的字符串 |
REVERSE(s) | reverse | 返回s反转后的字符串 |
NULLLIF(s1,s2) | null if | 比较两个字符串,如果s1与s2相等,则返回null;否则返回s1 |
SELECT FIELD('mm','hello','msm','amma'), -- 0 后续字符串中没有出现mm FIND_IN_SET('mm','hello,mm,amma'), -- 2 NULLIF('mysql','mysql'),NULLIF('mysql','') -- null mysql FROM DUAL;