本文共 7330 字,大约阅读时间需要 24 分钟。
测试表
mysql>desc t1;
+--------+--------------+------+-----+---------+-------+
|Field|Type|Null|Key|Default|Extra|
+--------+--------------+------+-----+---------+-------+
|id|int(11)|YES||NULL||
|name|char(6)|YES||NULL||
|addr|varchar(30)|YES||NULL||
|jixiao|decimal(6,2)|YES||NULL||
+--------+--------------+------+-----+---------+-------+
mysql>select*fromt1;
+------+-----------+-----------+---------+
|id|name|addr|jixiao|
+------+-----------+-----------+---------+
|1|三毛|beijing|550.00|
|2|liu|shanghai|300.00|
|3|NULL|guangxi|-210.55|
|4|meng|nanjing|NULL|
|5|wang|NULL|-532.30|
|6|赵晓燕|beijing|1800.00|
|7|tao|beijing|3200.20|
|8|bao|河北省|3000.00|
|9|jing|hangzhou|778.00|
|10|董磊|beijing|880.37|
|11|tian|tianjin|-354.00|
|12|NULL|hennan|-18.30|
|13|ali|上海市|5432.10|
|14|lei|beijing|5.50|
+------+-----------+-----------+---------+
length()统计英文长度
用来获取某列某行的长度
统计的是id=1 这行name 所对应值有几个字符mysql>selectid,addr,length(addr)fromt1whereid>10;
+------+-----------+--------------+
|id|addr|length(addr)|
+------+-----------+--------------+
|11|tianjin|7|
|12|hennan|6|
|13|上海市|9|
|14|beijing|7|
+------+-----------+--------------+
上海市是三个字符,但显示出来是9。如果直接使用length 来统计汉字的话是不准确的,要
想统计汉字就要使用char_length();
char_length()统计中英文长度
如果是length 还是char_length,统计的结果都是字符数,和字节没关系。
mysql> select id,addr,char_length(addr) from t1 where id>10;mysql>selectid,addr,char_length(addr)fromt1whereid>10;
+------+-----------+-------------------+
|id|addr|char_length(addr)|
+------+-----------+-------------------+
|11|tianjin|7|
|12|hennan|6|
|13|上海市|3|
|14|beijing|7|
+------+-----------+-------------------+
之前的时候我们给大家讲过字符串的类型char()和varchar(),如果能用短的,就不要用
长的,比如char(10)够用就不要使用char(30),如果一开始就选错了,那么这列字符串的长
度我们是可以减小的,但是要注意减小不能小于这列中最长的哪个字符。比如有一行值长度
为9,那么你就不能把字符串长度改成char(8),如果知道哪行长度最长就可以使用length 或
者char_length。
concat()字符连接
concat 是可以连接多个字符的, concat(‘ss’, ‘yy’, ‘zz’)
格式
concat(列名, ‘字符’)mysql>selectid,name,addr,concat('%%',name,'%%'),
->concat('$',addr,'$')fromt1whereid<6;
+------+--------+----------+------------------------+----------------------+
|id|name|addr|concat('%%',name,'%%')|concat('$',addr,'$')|
+------+--------+----------+------------------------+----------------------+
|1|三毛|beijing|%%三毛%%|$beijing$|
|2|liu|shanghai|%%liu%%|$shanghai$|
|3|NULL|guangxi|NULL|$guangxi$|
|4|meng|nanjing|%%meng%%|$nanjing$|
|5|wang|NULL|%%wang%%|NULL|
+------+--------+----------+------------------------+----------------------+
可以把几个字符结合在一起,连接起来。
比如姓名是一列,地址是一列,想把这两列结合在一起,就可以使用这个函数。mysql>selectid,concat('姓名:',name,'地址:',addr)fromt1;
+-----+--------------------------------------+
|id|concat('姓名:',name,'地址:',addr)|
+-----+--------------------------------------+
|2|姓名:liu地址:shanghai|
|4|姓名:meng地址:nanjing|
|7|姓名:tao地址:beijing|
|9|姓名:jing地址:hangzhou|
|11|姓名:tian地址:tianjin|
+------+-------------------------------------------+
concat_ws()字符连接
concat_ws(‘分隔符’, 列名,字符)mysql>selectid,name,concat_ws(':','用户名',name)fromt1whereid>6;
+------+--------+---------------------------------+
|id|name|concat_ws(':','用户名',name)|
+------+--------+---------------------------------+
|7|tao|用户名:tao|
|8|bao|用户名:bao|
|9|jing|用户名:jing|
|10|董磊|用户名:董磊|
|11|tian|用户名:tian|
|12|NULL|用户名|
|13|ali|用户名:ali|
|14|lei|用户名:lei|
+------+--------+---------------------------------+
insert()替换字符
用来做替换的
格式
insert(列名, 起始位, 长度, ‘替换的字符’)mysql>selectid,insert(name,2,3,'*')fromt1whereid<6;
+------+----------------------+
|id|insert(name,2,3,'*')|
+------+----------------------+
|1|三*|
|2|l*|
|3|NULL|
|4|m*|
|5|w*|
+------+----------------------+mysql>selectid,insert(name,2,1,'$$$$$')fromt1whereid<6;+------+--------------------------+
|id|insert(name,2,1,'$$$$$')|
+------+--------------------------+
|1|三$$$$$|
|2|l$$$$$u|
|3|NULL|
|4|m$$$$$ng|
|5|w$$$$$ng|
+------+--------------------------+
upper(字符)转大写
把小写转换成大写:mysql>selectupper('mysql');
+----------------+
|upper('mysql')|
+----------------+
|MYSQL|
+----------------+
lower(字符)转小写
把小写字母转成大写字母mysql>selectlower('GHOST');
+----------------+
|lower('GHOST')|
+----------------+
|ghost|
+----------------+
注:以上的那些操作都是没有改变表内容的。
replace()字符替换
格式
replace(列名,’abc’, ‘xyz’)
就是把abc 替换成xyzmysql>select*fromt1whereid<6;
+------+--------+----------+---------+
|id|name|addr|jixiao|
+------+--------+----------+---------+
|1|三毛|beijing|550.00|
|2|liu|shanghai|300.00|
|3|NULL|guangxi|-210.55|
|4|meng|nanjing|NULL|
|5|wang|NULL|-532.30|
+------+--------+----------+---------+
mysql>selectid,name,replace(addr,'bei','nan')fromt1whereid<6;
+------+--------+---------------------------+
|id|name|replace(addr,'bei','nan')|
+------+--------+---------------------------+
|1|三毛|nanjing|
|2|liu|shanghai|
|3|NULL|guangxi|
|4|meng|nanjing|
|5|wang|NULL|
+------+--------+---------------------------+
lpad()左填充
如果字段的某行值长度没有达到规定的长度,那么则在左边插入指定的字符:
意思就是name 这列每行的值如果长度不满10 个字符的话,那么从左边用#补齐,补足10 个字符。
格式
lpad(字段, 长度, ‘字符’)mysql>selectid,name,lpad(addr,30,'-')fromt1whereid<5;
+------+--------+--------------------------------+
|id|name|lpad(addr,30,'-')|
+------+--------+--------------------------------+
|1|三毛|-----------------------beijing|
|2|liu|----------------------shanghai|
|3|NULL|-----------------------guangxi|
|4|meng|-----------------------nanjing|
+------+--------+--------------------------------+
rpad()右填充
和lpad 意思是一样的,只是从右面填充:mysql>selectid,name,rpad(addr,30,'-')fromt1whereid<5;
+------+--------+--------------------------------+
|id|name|rpad(addr,30,'-')|
+------+--------+--------------------------------+
|1|三毛|beijing-----------------------|
|2|liu|shanghai----------------------|
|3|NULL|guangxi-----------------------|
|4|meng|nanjing-----------------------|
+------+--------+--------------------------------+
ltrim()去除左边空格
可以把某列左边的空格给取消去除。
从这里我们可以看到name=张三这行里,张三两边都是有两个空格的
Ltrim 的作用就是去除左边的空格:mysql>create table t2(name varchar(15));
mysql>insertintot2 values(' mk ');
mysql>select*fromt2;
+------------+
|name|
+------------+
|mk|
+------------+
mysql>selectname,concat('#',name,'#')fromt2;
+------------+----------------------+
|name|concat('#',name,'#')|
+------------+----------------------+
|mk|# mk # |
+------------+----------------------+mysql>selectname,concat('#',ltrim(name),'#')fromt2;
+------------+-----------------------------+
|name|concat('#',ltrim(name),'#')|
+------------+-----------------------------+
|mk|#mk # |
+------------+-----------------------------+
rtrim()去除右边空格mysql>selectname,concat('#',rtrim(name),'#')fromt2;
+------------+-----------------------------+
|name|concat('#',rtrim(name),'#')|
+------------+-----------------------------+
|mk|# mk# |
+------------+-----------------------------+
把两边的空格全部都去除。
mysql>selectname,concat('#',ltrim(rtrim(name)),'#')fromt2;
+------------+------------------------------------+
|name|concat('#',ltrim(rtrim(name)),'#')|
+------------+------------------------------------+
|mk|#mk# |
+------------+------------------------------------+
left()截取左字符
left(字段, 字数)
从字段左边开始,去规定长度的字符
疑问:这里为什么没有取出来值?取出来两个空格罢了mysql>selectaddr,left(addr,2)fromt1whereid>10;
+-----------+--------------+
|addr|left(addr,2)|
+-----------+--------------+
|tianjin|ti|
|hennan|he|
|上海市|上海|
|beijing|be|
+-----------+--------------+
right()截取右字符
如果有截取的去求的话,那么就可以考虑left 或者right
以上是关于字符串的函数.mysql>selectaddr,right(addr,2)fromt1whereid>10;
+-----------+---------------+
|addr|right(addr,2)|
+-----------+---------------+
|tianjin|in|
|hennan|an|
|上海市|海市|
|beijing|ng|
+-----------+---------------+
转载地址:http://nsiby.baihongyu.com/