Mysql基础函数

标签(空格分隔): MySQL


一、MySQL中常见的函数


一、字符函数

1.length获取参数值的字节个数

查看字符长度语句:
SHOW VARIABLES LIKE '%char%'

2.concat 拼接字符串

SELECT CONCAT(last_name,'_',first_name)  姓名
FROM `employees` ;

3. upper(大写转换)、lower(小写转换)

语法: upper()

示例:将姓名大写,名变小写,然后拼接
SELECT CONCAT(UPPER(`last_name`),'_',LOWER(`first_name`))  姓名
FROM `employees` ;

4. substr、substring,索引

注意:索引从1开始
语法:substr()
截取从指定索引处后面所有字符
示例:

SELECT SUBSTR('李莫愁爱上了陆展源',7)  out_put ;

截取从指定索引处指定字符串长度

SELECT SUBSTR('李莫愁爱上了陆展源',1,3)  out_put ;

案例:姓名中首字母大写,其余字符小写然后用_拼接,显示出来

SELECT CONCAT(UPPER (SUBSTR(`last_name`,1,1)) , '_' , LOWER(SUBSTR(`last_name` , 2)))
FROM `employees` ;

5. instr(返回子串第一次出现的索引,如果找不到返回0)

SELECT INSTR('杨不殷六侠爱上了殷六侠','殷六侠')  out_put ;

6. trim(去前后空格)

 去空格(前后)
SELECT TRIM('       张翠上     ')AS  out_put ;
 去指定字符(前后)
SELECT TRIM('a'FROM 'aaaaaaaa张aaaaa翠山aaaaaaa') AS out_put ;

7. lpad(指定的支付串实现左填充指定长度)

SELECT LPAD('殷素素',10,'*') AS out_put ;

8. rpad(指定的支付串实现右填充指定长度)

SELECT RPAD('小星星',10,'*') AS out_put ;

9. replace 替换(全体替换)

SELECT REPLACE('周芷若周芷若周芷若周芷若张无忌爱上了周芷若','周芷若','赵敏') AS out_put ;

二、数学函数

1、round 四舍五入

SELECT ROUND(-1.23) ;          == -2
 SELECT ROUND(1.2345,2) ;      == 1.23(小数点等候保留几位小数)

2、ceil 向上取整,返回>=该参数的最小整数

SELECT CEIL(1.09) ;               ==2
 SELECT CEIL(-1.09) ;             ==-1

3、floor 向下取整,返回<=该参数的最小整数

 SELECT FLOOR(1.09) ;           == 1
  SELECT  FLOOR(-1.09) ;          ==-2

4、truncate 截断

SELECT TRUNCATE(1.23456789,1) ;    == 1.2

5、mod取余 a-a/b*b

 SELECT MOD(10,3) ;               == 1
 SELECT MOD(-10,3) ;               == -1
 SELECT MOD(-10,-3) ;              == -1

三、日期函数

1、now 返回当前系统日期+时间

SELECT NOW() ;

2、curdate 返回当前系统日期,不包含时间

SELECT CURDATE() ;

3、curtime 返回当前时间,不包含日期

SELECT CURTIME() ;

4、获取指定的部分,年、月、日、小时、分钟、秒

 SELECT YEAR(NOW()) ;
 SELECT YEAR('1992-1-13') ;       ==1992
   SELECT MONTH(NOW()) ;
   SELECT MONTHNAME(NOW()) ;//英文输出

str_to_date 将字符通过指定的格式转换成日期

查询入职日期为1992-4-3的员工信息
方法一:
SELECT * FROM `employees`
WHERE `hiredate` = '1992-4-3' ;
方法二:
SELECT * FROM `employees`
WHERE `hiredate` = STR_TO_DATE('4-3-1992','%c-%d-%Y') ;

dete_format 将日期转换成字符

SELECT DATE_FORMAT(NOW(),'%y年%m月%d日') out_put ;

案例:查询有奖金的员工名和入职日期,并按奖金比降序排列
写法一:
SELECT `last_name`,DATE_FORMAT(`hiredate`,'%Y-%c-%d') AS 入职日期,`commission_pct`
FROM `employees` WHERE NOT ISNULL(`commission_pct`)
ORDER BY `commission_pct` DESC ;
 
写法二:
SELECT `last_name`,DATE_FORMAT(`hiredate`,'%m/%d %y') AS 入职日期,`commission_pct`
FROM `employees` WHERE `commission_pct` IS NOT NULL
ORDER BY `commission_pct` IS NOT NULL DESC ;

日期函数要使用到的格式符

格式符 功能
%Y 四位的年份
%y 2位的年份
%m 月份(01,02....11,12)
%c 月份(1,2.....11,12)
%d 日(01,02....)
%H 小时(二十四小时制)
%h 小时(十二小时制)
%i 分钟(00,01....59)
%s 秒(00,01....59)


其他函数

1、select version() ;版本号
2、select database() ;查看当前前数据库
3、select user() ;当前的用户


流程控制函数

1、if函数: if else 的效果

写法:if(比较或要判断的 , 值1, 值2)

SELECT IF(10>5,'大','小') ;

案例:有无奖金
 SELECT `last_name`,`commission_pct`, IF(`commission_pct` IS NULL,'没奖金,哈哈哈','有奖金,嘻嘻') AS 有无奖金 
 FROM `employees` ;

2、case函数的使用一:switch case 的效果

mysql中case语句的概念及其语法:
case 要判断的字段或表达式
when 常量1 then 要显示的值或语句1 ;
when常量2 then 要显示的值或语句2 ;
....
else 要显示的值或语句n;
end

案例:查询员工的工资
要求:
 部门号 = 30, 显示的工资为1.1倍
 部门号 = 40, 显示的工资为1.2倍
 部门号 = 50, 显示的工资为1.3倍
 其他部门,显示原工资
 SELECT `salary`,`department_id`,
 CASE `department_id`
 WHEN 30 THEN `salary` * 1.1
 WHEN 40 THEN `salary` * 1.2
 WHEN 50 THEN `salary` * 1.3
 ELSE `salary`
 END AS 新工资 
 FROM `employees` ;

3、case 函数的使用二:类似于 多重if

mysql中
case
when 常量1 then 要显示的值或语句1 ;
when常量2 then 要显示的值或语句2 ;
....
else 要显示的值或语句n;
end

案例:查询员工的工资
    要求:
    如果工资>20000,显示A级别
    如果工资>20000,显示A级别
    如果工资>20000,显示A级别
    否则,显示D级别
 SELECT `salary`,`department_id`,
 CASE
 WHEN `salary`>20000 THEN 'A'
 WHEN `salary`>15000 THEN 'B'
 WHEN `salary`>10000 THEN 'C'
 ELSE 'D'
 END AS 工资级别

二、分组函数


功能:用于统计使用,又称为聚合函数或统计函数或组函数

分类:
sum 求和、avg 平均值、 max 最大值、min 最小值、 count 计算个数

特点:
1、sum、avg一般用于处理数值型
max、min、count可以处理任何类型
2、以上分组函数均忽略null值
3、可以和distinct搭配
4、count函数的单独介绍:一般使用COUNT(*)用作统计行数
5、和分组函数一同查询的字段要求是group by后的字段

1、简单 的使用

 SELECT SUM(`salary`) FROM `employees` ;
  SELECT AVG(`salary`) FROM `employees` ; 
  SELECT SUM(`salary`) AS 和,AVG(`salary`) AS 平均 FROM `employees` ;

2、和distinct搭配

SELECT SUM(DISTINCT `salary`), SUM(`salary`) FROM `employees` ;

3、count函数的详细介绍

 SELECT COUNT(`salary`) FROM `employees` ;
 SELECT COUNT(*) FROM `employees` ;用的最多
 SELECT COUNT(1) FROM `employees` ;
三者结果相同

效率:
MYISAM存储引擎下,COUNT()的效率高
INNODB存储引擎下,CIOUNT(
)和count(1)的效率差不多,比COUNT(字段)要高一些

4、和分组函数一同查询的字段有限制

 SELECT AVG(`salary`),`email` FROM `employees` ;错误,不对应
posted @ 2024-08-08 11:23  我的十四行诗在哪里  阅读(51)  评论(0编辑  收藏  举报