资讯动态

MySQL笔记(1)-- 函数

发布时间:2026/10/22 6:48:03 来源:尧图企业网站定制
源码仓库Gitee · GitHub函数的使用字符串的拼接concat(str1,str2) as 别名号是运算符进行数值的计算当两个操作数是数值时做加法计算 select 1090 100当其中一个为字符型时会将字符型进行转换为数值转换失败将字符型转换为0【可以表示字符型忽略不算】select a90 90如果转换成功继续做加法计算select 1090 100当其中一个为null时结果为nullselect null90 null判断为空ifnull(str1,str2)如果str1为空输出str2获取字段值的长度length(str)字段类型是varchar的几种字符集下的长度值【适应中文模式和英文模式即中文标点和英文标点】ASCII格式不能存储汉字单个英文字母长度为1GBK格式单个汉字长度是2单个英文字母长度是1UTF8格式单个汉字长度是3单个英文字母长度是1UTF16格式单个汉字和英文字母长度都是2UTF-32格式单个汉字和英文字母长度都是4varchar(M)和char(M)的对比varchar(M)的M范围为0-65535【2的16次方2个字节】存储可变长度字符存储位置不固定必须使用引用表来查找内容查找效率低char(M)的M范围为0-255【2的8次方1个字节】默认为1存储固定长度的字符字段存储在寄存器中因为它的大小是已知的这使得搜索和索引更快比如性别【0/1男/女】大小写转换upper(str)转换为大写lower(str)转换为小写截取substr(str,index)对str进行截取从index开始结果不包含index的值默认索引为1获取第一个出现值的索引instr(str1,str2) instr(ababab,a) 1去除字符串前后空格trim(str)trim( a )去除前后指定字符trim(str1 from str2) trim(a from aba),str2没有去除前后空格若str2前后有空格会发现匹配不了而无法去除指定字符去除前后指定字符改进trim(str1 from trim(str2)) trim(a from trim( aba ))位数填充lpad进行左填充【rpad进行右填充】当字符串长度不满指定的数值时缺少多少位在左边进行填充当字符串长度超过指定数值时只输出指定数值的长度字符串select lpad(字符串, 10,*) as name 结果*******字符串 select lpad(字符串, 1,*) as name 结果字字符替换replace(str1,str2,str3)若在字符串str1中存在str2则将str2替换为str3replace(abc,a,d)结果dbc取舍round进行四舍五入对负数来说先对其转换为正数取整再加负号转换为负数round(-1.6)先对1.6进行取整为2再加上符号round(1.23456, 2)表示小数位取2位ceil向上取整)ceil(1.2)2floor向下取整()floor(-9.9)-10truncate(M,D)截断D表示只取小数点后几位truncate(1.23456,3) 1.234取余mod 等价% ,mod(a,b)等价a-a/b*b,如果a是正数结果是正数如果a是负数结果是负数结果的正负跟b无关now()获取日期加时间CURDATE()获取日期curtime()获取时间year(str)获取指定日期时间中的年 year(now());将指定日期格式的字符转换为yyyy-MM-dd HH:mm:ss的格式:str_to_date(str1,str)str1和str2的格式必须对应str_to_date(1/21/29 11,%c/%d/%y %h)结果2029-01-21 11:00:00 str_to_date(1-21-2020,%c-%d-%Y)结果2020-01-21将指定日期格式yyyy[英文符号]MM[英文符号]dd HH[英文符号]mm[英文符号]ss类似yyyy-MM-dd HH:mm:ss或yyyy!MM!dd HH,mm.ss转换成指定格式的字符date_format(str1,str)select date_format(2020!12!12 12,,%Y/%m/%d %H)结果2020/12/12 12 select date_format(2012-12-2 12,%d日%m月%Y年 %H)结果02日12月2012年 12sum求和avg平均值max最大值min最小值count总数sum和avg处理数值类型max、min、count处理任何类型以上类型的处理都忽略null值即包含null的数据不进行处理推荐使用count(*)MYISAM存储引擎下count(*)的效率高innodb存储引擎下count(*)和count(1)的效率差不多比count(字段)要高一些if(expr,a,b)如果表达式expr为真结果为a否则为b表示不等于等价!但不能判断null使用is null和is not null来判断is null仅可以判断null等价null,表示等于可以判断null和数值但可读性差模糊查询like语法like ‘__a_b%表示查询包含第三个为a第五个为b的数据like _\_%表示查询包含第二个为_的数据\表示转义也可以使用 like _$_% ESCAPE $来表示escape表示$是转义字符转移字符可以自定义一个_‘表示仅替代一个字符一个’%‘表示替代一个或多个字符between范围的使用between 1 and 2表示范围在[1,2]between 3 and 2表示[3,...)和(...,2]即大于等于3和小于等于2查看表的结构desc 表名排序order by 字段 asc(升序默认)/desc(降序)支持多个字段的排序分页limit 偏移位置,条目【偏移位置默认开始为0】limit 0,10等价limit 10表示查询前10条记录case语法case等价switch,如果字段的值符合表达式exprA ,输出rsultAcase 字段 when exprA then rsultA when exprB then rsultB else rsult end as 结果分组group byselect 分组函数 lie【要求出现在group by的后面】分组前查询使用whereselect MAX(id) from tableName where id10 group by id;分组后查询使用havingselect count(1) from tableName group by id having count(1)1;union联合查询sql union sql 将两个SQL语句的结果一起输出应用场景是查询结果来自多表但表之间没有关联关系每个表的查询列数必须是一致的查询的每个列值属性和顺序最好一致【union默认去重union all 可以不去重】select id,name,sex from tableName where sex男 union select id,name,gender from tableName where gendermale完整sql结构select 列表 form 表 连接类型 join 表2 on 连接条件 where 筛选条件 group by 分组列表 having 分组后的筛选 order by 排序列表 limit 偏移,条目数讨论select *from tableName;和select *from tableName where columnNameA like %% and columnNameB like %% 的区别前面一句会把包含null的数据查出来后面一句会把columnNameA和columnNameB包含有值的即使是空字符串的查出来不包含指定列的null值把and替换为orselect *from tableName where columnNameA like %% or columnNameB like %% 的区别会把columnNameA和columnNameB当中一列存在值的查询出来

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑