MySQL数据库基础:字符、日期、数学、控制函数

MySQL数据库基础:字符、日期、数学、控制函数,第1张

【MySQL数据库基础:3.字符、日期、数学、控制函数】 

作者:zhenyi

专栏:mysql数据库1

简介:MySQL基础专栏文章,适合MySQL基础阶段的学习与阅读。

文章所用文件,可与作者联系获取!如果对您有帮助,点个关注吧,持续更新中,谢谢支持。如果有问题或错误,欢迎指出私信与我联系,谢谢。

目录

常见函数

一.字符函数

1.length    

2.concat    

3.upper、lower

 4.substr,substring

5.instr

6.trim

 7.ipad

8.rpad

9.replace

二.数学函数

1.round

2.ceil

 3.floor

4.truncate  

5.mod

三.日期函数

1.now

2.curdate

3.curtime

4.year、month

5.日期函数

四.其他函数

1.SELECT VERSION();

2.SELECT DATABASE();

3.SELECT USER();

五、流程控制函数

1.if函数

2.case函数


注意:本文使用的表如下,如果需要可以联系作者获取!!!

常见函数

概念:类似于java的方法,将一组逻辑语句封装在方法体中,对外暴露方法名

好处:1.隐藏了实现细节 

          2.提高代码的重用性

调用:select 函数名(实参列表)【from 表】;

特点:

        1.叫什么(函数名)

        2.干什么(函数功能)

分类:

        1.单行函数,如concat,length,ifnull等

        2.分组函数

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

常见函数:

    字符函数: LENGTH        CONCAT        SUBSTR        INSTR        TRIM        UPPER

    LOWER        LPAD        RPAD        REPLACE

    数学函数:ROUND        CEIL        FLOOR        TRUNCATE        MOD

    日期函数:NOW        CURDATE        CURTIME        YEAR        MONTH        MONTHNAME

    DAY        HOUR        MINUTE        SECOND        STR_TO_DATE        DATE_FORMAT

    其他函数:VERSION        DATE_FORMAT        USER

    控制函数:IF        ELSE

    

一.字符函数 1.length    

获取参数值的字节个数

        SELECT LENGTH('john');

SELECT LENGTH('john');

查询结果如下:

2.concat    

拼接字符串

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

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

查询结果如下:

3.upper、lower

SELECT UPPER('john');

SELECT LOWER('john');

示例:将姓变大写,名变小写,然后拼接

SELECT CONCAT(UPPER(last_name),LOWER(first_name))  姓名  FROM employees;

SELECT	CONCAT(UPPER(last_name)),LOWER((first_name))	AS	姓名	FROM	employees;

查询结果如下:

 4.substr,substring

注意:索引从1开始

4.1:截取从指定索引处后面所有字符

SELECT SUBSTR('大概晚上几点回来吃饭',7) out_put;

SELECT SUBSTR('大概晚上几点回来吃饭',7) out_put;

查询结果如下:

4.2#截取从指定索引处指定字符长度的字符

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

SELECT SUBSTR('大概晚上几点回来吃饭',1,3) out_put;

查询结果如下:

5.instr

SELECT INSTR('杨不悔爱上了易柳霞','易柳霞') AS out_put

FROM employees;

SELECT INSTR('杨不悔爱上了易柳霞','易柳霞') AS out_put

FROM employees;

查询结果如下:

6.trim

SELECT LENGTH(TRIM('    令狐冲    ')) AS out_put;

SELECT LENGTH(TRIM('    令狐冲    ')) AS out_put;

查询结果如下:

 7.ipad

用指定的字符实现左填充指定长度

SELECT LPAD('令狐冲',2,'*') AS out_put;

SELECT LPAD('令狐冲',2,'*') AS out_put;

查询结果如下:

8.rpad

用指定的字符实现右填充指定长度

SELECT LPAD('令狐冲',12,'ab') AS out_put;

SELECT LPAD('令狐冲',12,'ab') AS out_put;

查询结果如下:

9.replace

替换

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

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

查询结果如下:

 字符函数代码:

SELECT	*	FROM	employees;

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

SELECT	CONCAT(UPPER(last_name)),LOWER((first_name))	AS	姓名	FROM	employees;

SELECT SUBSTR('大概晚上几点回来吃饭',7) out_put;

SELECT SUBSTR('大概晚上几点回来吃饭',1,3) out_put;


SELECT INSTR('杨不悔爱上了易柳霞','易柳霞') AS out_put

FROM employees;

SELECT LENGTH(TRIM('    令狐冲    ')) AS out_put;

SELECT TRIM('a' FROM 'aaaaaaaaaaa令aaaaaaaaaa狐冲aaaaaaaaaaaaaaaa') AS out_put;

SELECT LPAD('令狐冲',2,'*') AS out_put;

SELECT LPAD('令狐冲',12,'ab') AS out_put;

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

二.数学函数 1.round

四舍五入

SELECT ROUND(-1.55);

SELECT ROUND(1.567,2);

SELECT ROUND(-1.55);

SELECT ROUND(1.567,2);

查询结果如下:

 

2.ceil

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

SELECT CEIL(-1.02);

SELECT CEIL(-1.02);

查询结果如下:

 3.floor

向下取整,返回<=该参数的最大整数

SELECT FLOOR(-9.99);

SELECT FLOOR(-9.99);

查询结果如下:

4.truncate  

截断

SELECT TRUNCATE(1.69999,1);

SELECT TRUNCATE(1.69999,1);

查询结果如下:

5.mod

取余

例如:     mod(a,b) : a-a/b*b

                mod(-10,-3):-10-(-10)/(-3)*(-3)=-1

SELECT MOD(10,-3);

SELECT 10%3;

SELECT MOD(10,-3);

SELECT 10%3;

查询结果如下:

 

数学函数代码:

SELECT	*	FROM	employees;

SELECT ROUND(-1.55);

SELECT ROUND(1.567,2);

SELECT CEIL(-1.02);

SELECT FLOOR(-9.99);

SELECT TRUNCATE(1.69999,1);

SELECT MOD(10,-3);

SELECT 10%3;
三.日期函数 1.now

返回当前系统日期+时间

SELECT NOW();

SELECT NOW();

查询结果如下:

2.curdate

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

SELECT CURDATE();

SELECT CURDATE();

查询结果如下:

3.curtime

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

SELECT CURTIME();

SELECT CURTIME();

查询结果如下:

4.year、month

可以获取指定的部分,年,月,日,小时,分钟,秒

4.1:SELECT YEAR(NOW()) 年;

SELECT YEAR(NOW()) 年;

查询结果如下:

4.2:SELECT YEAR(hirredate) 年 FROM employees;

SELECT YEAR(hirredate) 年 FROM employees;

查询结果如下:

4.3:SELECT MONTH(NOW()) 月;

        SELECT MONTHNAME(NOW()) 月;

SELECT MONTH(NOW()) 月;

SELECT MONTHNAME(NOW()) 月;

查询结果如下:

 

5.日期函数

now:获取当前日期

5.1:str_to_date:将日期格式的字符转换成指定格式的日期

STR_TO_DATE('9-13-1999','%m-%d-%y');

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

SELECT STR_TO_DATE('1998-3-2','%Y-%c-%d') AS out_put;:

案例:查询入职日期为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');

SELECT * FROM employees WHERE hiredate='1992-4-3';

SELECT * FROM employees WHERE hiredate=STR_TO_DATE('4-3 1992','%c-%d %Y');

查询结果如下:

 

5.3: date_format:将日期转换成字符

DATE_FORMAT('2018/6/6','%Y年%M月%d日')

案例:查询有奖金的员工名和入职日期(xx月/xx日 xx年)

SELECT last_name,DATE_FORMAT(hiredate,'%m月/%d日 %y年')  入职日期

FROM employees

WHERE commission_pct IS NOT NULL;

SELECT last_name,DATE_FORMAT(hiredate,'%m月/%d日 %y年')  入职日期

FROM employees

WHERE commission_pct IS NOT NULL;

查询结果如下:

 日期函数所有代码:

SELECT	*	FROM	employees;

SELECT NOW();

SELECT CURDATE();

SELECT CURTIME();

SELECT YEAR(NOW()) 年;

SELECT YEAR(hirredate) 年 FROM employees;
 

SELECT MONTH(NOW()) 月;

SELECT MONTHNAME(NOW()) 月;

SELECT * FROM employees WHERE hiredate='1992-4-3';

SELECT * FROM employees WHERE hiredate=STR_TO_DATE('4-3 1992','%c-%d %Y');


SELECT last_name,DATE_FORMAT(hiredate,'%m月/%d日 %y年')  入职日期

FROM employees

WHERE commission_pct IS NOT NULL;

四.其他函数 1.SELECT VERSION(); 2.SELECT DATABASE(); 3.SELECT USER();

五、流程控制函数 1.if函数

if else 的效果

案例:查询是否有奖金,有则输出:有奖金,666。无则输出:没奖金,哈哈。

SELECT last_name,commission_pct,IF(commission_pct IS NULL,'没奖金,哈哈','有奖金,666') AS 备注

FROM employees;

SELECT last_name,commission_pct,IF(commission_pct IS NULL,'没奖金,哈哈','有奖金,666') AS 备注

FROM employees;

查询结果如下:

2.case函数

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

case 要判断的字段或表达式

when 常量1 then 要显示的值1或语句1;

when 常量2 then 要显示的值2或语句2;

...

else 要显示的值n或语句n;

end

案例1:查询员工的工资,要求

部门号=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;

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;

查询结果如下:

案例2:查询员工的工资的情况

SELECT salary,

CASE

WHEN salary>20000 THEN 'A'

WHEN salary>15000 THEN 'B'

WHEN salary>10000 THEN 'C'

ELSE 'D'

END AS 工资级别

FROM employees;

SELECT salary,

CASE

WHEN salary>20000 THEN 'A'

WHEN salary>15000 THEN 'B'

WHEN salary>10000 THEN 'C'

ELSE 'D'

END AS 工资级别

FROM employees;

查询结果如下:

流程控制函数所有代码:

SELECT	*	FROM	employees;


SELECT last_name,commission_pct,IF(commission_pct IS NULL,'没奖金,哈哈','有奖金,666') AS 备注

FROM employees;


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;


SELECT salary,

CASE

WHEN salary>20000 THEN 'A'

WHEN salary>15000 THEN 'B'

WHEN salary>10000 THEN 'C'

ELSE 'D'

END AS 工资级别

FROM employees;

如果对您有帮助,点个关注吧,持续更新中,谢谢支持。如果有问题或错误,欢迎指出与我联系,谢谢。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/870980.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-13
下一篇 2022-05-13

发表评论

登录后才能评论

评论列表(0条)

保存