2. 字符串比较函数和运算符
- LIKE:假单模式匹配
- NOT LIKE:否定的简单模式匹配
- STRCMP:比较两个字符串
2.1 查看字符集
-- 查看mYSQl支持的字符集
show charset;
-- 查看MYSQL数据库服务器和数据库字符集
show variables like '%character%';
show variables like 'collation%';
-- 查看数据库的字符集
show create database employees
-- 查看数据表的字符集
show table status from employees like 'employees';
-- 查看表中列的字符集
show full columns from employees;
2.2 测试
-- [1] 同字符集下于大小写无关
SELECT 'abc' LIKE 'ABC';
-- 1
SELECT 'abc' LIKE 'Abc';
-- 1
SELECT 'abc' LIKE _utf8mb4 'ABC' COLLATE utf8mb4_0900_as_cs;
-- 0
-- [2] 支持数字
SELECT 10 LIKE '1%';
-- 1
SELECT STRCMP('text', 'text2');
-- -1
SELECT STRCMP('text2', 'text');
-- 1
SELECT STRCMP('text', 'text');
-- 0
3. 正则表达式
4. 字符集和函数结果整理
ASCII()一返回字符对应的ASCII码
SELECT ASCII('a');
-- 97
SELECT ASCII('A');
-- 65
BIN()一返回数对应的二进制字符串
SELECT BIN(7);
-- '111'
BIT_LENGTH()一返回字符串的长度(单位/bit)
SELECT BIT_LENGTH('a');
-- 8 {8比特,一个字节}
SELECT BIT_LENGTH('啊');
-- 24 {3个字节}
LENGTH()一返回字符串的长度
SELECT LENGTH('localhost');
-- 9
SELECT LENGTH('向上');
-- 6
CONCAT()一返回拼接后的字符串
SELECT CONCAT('My', 'S', 'QL');
-- 'MySQL'
SELECT CONCAT('My', NULL, 'QL');
-- NULL
SELECT CONCAT(14.3);
-- '14.3'
CONCAT_WS()一带分隔符的字符串拼接
SELECT CONCAT_WS(',' ,'First name','Second name','Last Name');
-- 'First name,Second name,Last Name'
SELECT CONCAT_WS(',', 'First name',NULL,'Last Name');
-- 'First name,Last Name'
ELT()一返回字符串列表中的第N个元素
SELECT ELT(1, 'Aa', 'Bb', 'Cc', 'Dd');
-- 'Aa'
SELECT ELT(4, 'Aa', 'Bb', 'Cc', 'Dd');
-- 'Dd'
FIELD()一和ELT形成互补函数
SELECT FIELD('Bb', 'Aa', 'Bb', 'Cc', 'Dd', 'Ff');
-- 2
SELECT FIELD('Gg', 'Aa', 'Bb', 'Cc', 'Dd', 'Ff');
-- 0
FORMAT()一将数字格式化成字符串
SELECT FORMAT(12332.123456, 4);
-- '12,332.1235'
SELECT FORMAT(12332.1,4);
-- '12,332.1000'
SELECT FORMAT(12332.2,0);
-- '12,332'
SELECT FORMAT(12332.2,2,'de_DE');
-- '12.332,20'
INSERT()一字符串插入
-- INSERT(str, pos, len, newstr)
-- 参数:
-- str: 原字符串
-- pos:将要插入的位置
-- len:插入的长度
-- newstr:要被插入的字符串
-- 作用:在原字符串的一个位置插入新字符串的规定长度
-- 注意:不同于传统的字符串计算开始位置,这里从1开始。
SELECT INSERT('Quadratic', 3, 4, 'What');
-- 'QuWhattic' {满足要求,位置插入值}
SELECT INSERT('Quadratic', -1, 4, 'What');
-- 'Quadratic' {-1,这个位置不在原字符串的长度中,所以返回原字符串}
SELECT INSERT('Quadratic', 3, 100, 'What');
-- 'QuWhat' {what只有4位,所以后面位置的字符会被舍弃掉}
INSTR()一字符串搜寻,返回子串在父串中第一次出现的位置
SELECT INSTR('foobarbar', 'bar');
-- 4
SELECT INSTR('xbar', 'foobar');
-- 0
LOCATE()一位置寻找
-- LOCATE(substr,str) , LOCATE(substr,str,pos)
-- 没找到返回0
SELECT LOCATE('bar', 'foobarbar');
-- 4
SELECT LOCATE('xbar', 'foobar');
-- 0
SELECT LOCATE('bar', 'foobarbar', 5);
-- 7
LOWER()一字符串转小写
SELECT LOWER('XS');
-- xs
-- LCASE 是 LOWER 的同义词
SELECT LCASE('XS')
-- xs
UPPER()一字符串转大写
SELECT UPPER('think');
-- THINK
-- UCASE 是 UPPER 的同义词
SELECT UCASE('think')
-- THINK
LEFT()一返回字符串从左边起的N个长度的子字符串
SELECT LEFT('foobarbar', 5);
-- 'fooba'
RIGHT()一返回字符串从右边起的N个长度的子字符串
-- RIGHT(str, len)
SELECT RIGHT('foobarbar', 4);
-- 'rbar'
LPAD()一字符串左侧开始填充
-- LPAD(str, len, padstr)
SELECT LPAD('hi',4,'??');
-- '??hi'
SELECT LPAD('hi',1,'??');
-- 'h'
RPAD()一字符串右侧开始填充
SELECT RPAD('hi',5,'?');
-- 'hi???'
SELECT RPAD('hi',1,'?');
-- 'h'
LTRIM()一返回已删除前导空格字符的字符串。
SELECT LTRIM(' barbar');
-- 'barbar'
RTRIM()一返回删除了尾部空格字符的字符串。
SELECT RTRIM('barbar ');
-- 'barbar'
TRIM()一返回删除了前导空格和尾随空格的字符串
SELECT TRIM(' barbar ');
-- 'barbar'
SUBSTR()一字符串截取
-- SUBSTR()是的同义词 SUBSTRING()。
-- SUBSTRING(str,pos)
-- SUBSTRING(str,pos,len)
SELECT SUBSTRING('Quadratically',5);
-- 'ratically'
SELECT SUBSTRING('foobarbar' FROM 4);
-- 'barbar'
SELECT SUBSTRING('Quadratically',5,6);
-- 'ratica'
SELECT SUBSTRING('Sakila', -3);
-- 'ila'
SELECT SUBSTRING('Sakila', -5, 3);
-- 'aki'
SELECT SUBSTRING('Sakila' FROM -4 FOR 2);
-- 'ki'