函数——封装的常用操作
- 分类:
- 单值函数【一个或零个参数进,一个结果返回】
- 多值函数(又称聚合函数)【零个或多个参数进,一个结果返回】
- 单值函数:数学函数,字符串函数,日期函数,条件函数,信息函数和加密函数,其他函数
-
#数学函数:
- 1)绝对值:ABS(num)
- 例如:ABS(-12) -- 结果为-12的绝对值
- 2)圆周率:PI()
- 3)数据精度处理:
- floor(num)【保留num的整数部分,忽略小数部分】
- 例如:floor(12.99) -- 结果为12
- #truncate(num1,num2) -- num1以去尾(即忽略后续)方式保留num2位小数
- ceil(num),ceiling(num)【结果为大于等于num的最小整数】
- 例如:ceil(12.22) -- 结果为13
- round(num)【四舍五入法,求最近整数】
- 例如:round(12.5) -- 结果为13
- #小数精度处理:round(num1,num2) -- num1以四舍五入的方式保留num2位小数
- floor(num)【保留num的整数部分,忽略小数部分】
- 4)随机数:rand() 【生成一个0-1的随机数,包括0但不包括1】
- 5)平方根:sqrt(num) 例如:sqrt(9) -- 结果为3
- 6)余数:mod(num1,num2) 例如:mod(12,5) -- 结果为2
- 7)幂运算:pow(num1,num2),power(num1,num2)【结果为num1的num2次方】
- 例如:pow(2,4) -- 结果为16(=2^4)
- 8)三角函数:sin(),cos() 等
- 1)绝对值:ABS(num)
-
#字符串函数:主要用于字符串处理
- 1)获取字符串长度:char_length(str),length(str)
- char_length返回字符串str的字符个数,
- length返回字符串str在当前数据编码环境中占用字节数
- 例如:在utf-8环境中,
- char_length('哈哈哈哈') -- 结果为:4
- length('哈哈哈哈') -- 结果为:12
- 例如:在utf-8环境中,
- 2)字符串连接:concat(str1,str2,......),concat_ws(str1,str2,......)
- concat(str1,str2,......) -- 直接将所有字符串拼接成一个字符串
- 例如:concat('呵呵','哈哈','嘿嘿') -- 结果为‘呵呵哈哈嘿嘿’
- concat_ws(str1,str2,......) -- 将所有字符串拼接成一个字符串,str1作为拼接符
- 例如:concat_ws('呵呵','哈哈','嘿嘿','东东') -- 结果为‘哈哈呵呵嘿嘿呵呵东东’
- concat(str1,str2,......) -- 直接将所有字符串拼接成一个字符串
- 3)大小写转化:lower(str),upper(str)
- lower(str) -- 将str内所有字母小写
- 例如:lower('abcdEFGH') -- 结果为:abcdefgh
- upper(str) -- 将str内所有字母大写
- 例如:upper('abcdEFGH') -- 结果为:ABCDEFGH
- lower(str) -- 将str内所有字母小写
- 4)翻转字符串:reverse(str)【将str内的字符翻转】
- 例如:reverse('太逆天了') -- 结果为:乐天逆太
- 5)截取字符串:trim(str),ltrim(str),rtrim(str)
- trim(str) -- 将str左右的空格全部去除,返回str内的字符
- #trim(str1 from str2) -- 去除str2两边的str1字符串
- 例如:trim('sn' from 'dddsnhahahasn') -- 结果为‘dddsnhahaha’
- ltrim(str) -- 将str左边的空格去除,返回str内的字符和(如果存在)它右边的空格
- rtrim(str) -- 将str右边的空格去除,返回str内的字符和(如果存在)它左边的空格
- 6)获取子字符串:left(str,num),right(str,num)
- left(str,num) -- 获取str字符串左边num位的字符
- 例如:left('sasfds',2) -- 结果为:sa
- right(str,num) -- 获取str字符串右边num位的字符
- 例如:right('sasfds',3) -- 结果为:fds
- #select left(字段名,整数) from 表名;【获取指定表下指定字段的前指定整数位】
- left(str,num) -- 获取str字符串左边num位的字符
- 7)填补字符串:lpad(str1,num,str2),rpad(str1,num,str2)
- lpad(str1,num,str2) -- 总长为num,str1长度不足num的部分,取str2的部分从左边补足
- 例如:lpad('haha',6,'sasa') -- 结果为:sahaha
- rpad(str1,num,str2) -- 总长为num,str1长度不足num的部分,取str2的部分从右边补足
- 例如:rpad('haha',7,'sasa') -- 结果为:hahasas
- #在填补字符串中,若str1本身长度不如num,则只显示num长度的部分
- 例如:lpad('haha',2,'sasa') -- 结果为:ha
- lpad(str1,num,str2) -- 总长为num,str1长度不足num的部分,取str2的部分从左边补足
- 8)字符串操作:substring
- substring(str,num),substring(str from num)
- -- 输出str从num位(包括num位)往后的部分
- 例如:substring('hahaha',2) -- 结果为:ahaha
- substring(str,num1,num2),substring(str from num1 for num2)
- -- 输出str从num位(包括num位)往后的部分,总长为num2
- 例如:substring('hahaha',2,2) -- 结果为:ah
- substring(str,num),substring(str from num)
- 9)重复字符串:repeat(str,num)
- --将str的内容重复输出num遍
- 例如:repeat('哈喽',4) -- 结果为:哈喽哈喽哈喽哈喽
- 1)获取字符串长度:char_length(str),length(str)
-
#日期处理函数:使用函数获取想要的日期信息
- 1)基础处理:
- select date1 - date2
- select date1 < date2
- ......
- 2)获取当前日期信息(常用):
- 获取yyyy-MM-dd:curdate(),current_date()
- 获取yyyy-MM-dd hh:mm:ss:now(),sysdate(),localtime(),current_timestamp()
- 获取hh:mm:ss:current_time()
- 获取年份:year(date)
- 获取月份:month(date),monthname(date)
- 例如:month(now()) -- 获取当前日期的月份
- 获取天:day(date)
- #更多:dayofweek(date),weekday(date)...
- 获取星期:dayname(date) -- 指定的日期对应星期几,返回值是英文(如Friday)
- 获取时分秒:hour(date),minute(date),second(date)
- 获取一些特殊时间:
- week(date),weekofyear(date) -- 获取指定日期在当前年份的总共周数
- 例如:week('2023-01-01') -- 结果为:52
- #特殊:当weekofyear('2023-01-01')时,结果为:1
- #更多:dayofyear(date),dayofweek(date) -- 当前天数
- week(date),weekofyear(date) -- 获取指定日期在当前年份的总共周数
- 3)日期转化:
- time_to_sec(time) -- 指定时间到0点过去的时间换算成秒数
- 例如:time_to_sec('00:00:04') -- 结果为:4
- sec_to_time(num) -- 秒数换算成时间
- time_to_sec(time) -- 指定时间到0点过去的时间换算成秒数
- 4)日期的计算:
- date_add(date,INTERVAL num type) -- 获取指定日期之后指定时间的时间
- 例如:date_add('2023-07-17 10:10:10',INTERVAL 10 second);
- 结果为:2023-07-17 10:10:20
- date_sub(date,INTERVAL num type) -- 获取指定日期之前指定时间的时间
- 例如:date_sub('2023-07-17 10:10:10',INTERVAL 10 second);
- 结果为:2023-07-17 10:10:00
- datediff(date1,date2) -- 获取两个指定日期之间的时间差(天)
- 例如:datediff('2024-07-17 11:10:10','2023-07-17 10:20:40');
- 结果为:366
- timediff(date1,date2) -- 获取两个指定日期之间的时间差(时:分:秒)
- 例如:timediff('2024-07-17 11:10:10','2023-07-17 10:20:40');
- 结果为:838:59:59
- timestampdiff(type,date1,date2) -- 获取两个指定日期之间的指定参数(年月日时分秒皆可)
- 例如:timestampdiff(hour,'2024-07-17 11:10:10','2025-07-17 10:20:40');
- 结果为:8759
- makedate/maketime/...
- date_format(date,str) -- 格式化日期
- 例如:date_format('2023-07-17 9:20:1','%y年%m月%d日 %w %h%i%s')
- 结果为:23年07月17日 1 092001【2023年7月17日 周一 09:20:01】
- date_add(date,INTERVAL num type) -- 获取指定日期之后指定时间的时间
- 1)基础处理:
-
#信息函数:获取一些数据库系统中的信息
- 1)获取当前用户:user(),current_user(),system_user()
- 2)获取数据库:database()
- 3)获取版本信息:version()
- 4)返回最近一个查询获取的信息条数:found_rows()
- 5)返回autoincrement字段最后一次插入数据的id:last_insert_id()
- 6)获取一串唯一的id好:uuid()
-
#判断函数:用于判断条件是否满足
- 1)if(jud,str1,str2) -- 根据条件表达式jud,若为TRUE则输出str1,若为FALSE则输出str2
- 例如:if(12>10,'haha','xixi') -- 结果为:haha
- 2)ifnull(str1,str2) -- 判断str1,若为null则输出str2,否则输出str1
- 1)if(jud,str1,str2) -- 根据条件表达式jud,若为TRUE则输出str1,若为FALSE则输出str2
-
#加密运算
- 1)不可逆:password(str),md5(str)
- 2)可逆(异或):encode(str1,str2),decode(str1,str2)
-
#选择查询:依赖于已经有的数据进行数据筛选
-