1-数值函数|Numerical Functions
- SELECT ROUND(5.73)得到6
- SELECT ROUND(5.73,1)得到5.7
- SELECT TRUNCATE(5.7345,3)得到5.734
- SELECT CEILING(5.7)会返回大于或等于这个数字的最小整数,即6
- SELECT FLOOR(5.2)会返回小于或等于这个数字的最大整数,即5
- SELECT ABS(-5.2)会返回绝对值,即5.2
- SELECT RAND()用来生成0-1区间的随机浮点数,每次调用这个函数,我们会得到介于0-1之间的随机值
可以在浏览器上搜索MySQL Numeric Functions来获取更多函数。
2-字符串函数|String Functions
- SELECT LENGTH('sky')得到3
- SELECT UPPER('sky')得到SKY
- SELECT LOWER('Sky')得到sky
- SELECT LTRIM(' sky')得到sky:LTRIM是LEFT TRIM的缩写
- SELECT RTRIM('sky ')得到sky:RTRIM是RIGHT TRIM的缩写
- SELECT TRIM(' sky ')得到sky:TRIM会删除所有的前导和尾随空格
- SELECT LEFT(‘Kindergarden',4)得到Kind:会返回字符串左侧的几个字符
- SELECT RIGHT(‘Kindergarden',6)得到garden:会返回字符串右侧的几个字符
- SELECT SUBSTRING('Kindergarden',3,5),可以得到字符串中任何位置的字符,第二个参数是起始位置,第三个参数是长度,得到nderg,如果不写第三个字符,则会返回从起始位置起算到字符串最后的所有字符
- SELECT LOCATE('n','Kindergarden')得到3
- SELECT LOCATE('garden','Kindergarden'),得到7:会返回第一个字符或者一串字符匹配位置,,无所谓N是大写还是小写,这个查找不分大小写。如果搜索字符串里没有该字符,得到0
- SELECT REPLACE('Kindergarten','garten','garden')得到Kindergarden
- SELECT CONCAT('first','last')得到firstlast
3-MySQL中的日期函数|Date Function in MySQL
- SELECT NOW()会返回当前的日期和时间,即2023-06-08 09:37:21
- SELECT CURDATE()会返回当前的日期,即2023-06-08
- SELECT CURTIME()会返回当前的时间,即09:37:21
- SELECT YEAR(NOW())得到2023
- SELECT MONTH(NOW())得到6
- SELECT HOUR/MINUTE/SECOND(NOW())得到当前的时/分/秒
- SELECT DAYNAME/MONTHNAME(NOW())得到Thursday/June
- SELECT EXTRACT(YEAR/MONTH/DAY/SECOND FROM NOW())这个函数是标准SQL语言的一部分,所以如果想要把代码录入别的DBMS,最好用EXTRACT函数。
练习:得到当年下的订单
4-格式化日期和时间|Formatting Dates and Times
- SELECT DATE_FORMAT(NOW(),'%Y')得到2023
- SELECT DATE_FORMAT(NOW(),'%y')得到23
- SELECT DATE_FORMAT(NOW(),'%M')得到June
- SELECT DATE_FORMAT(NOW(),'%m')得到06
- SELECT DATE_FORMAT(NOW(),'%d')得到08
- SELECT DATE_FORMAT(NOW(),'%Y')得到2023
- SELECT DATE_FORMAT(NOW(),'%M %d %Y')得到June 08 2023
以上为日期函数,时间函数同理
- SELECT TIME_FORMAT(NOW(),'%H:%i %p')得到10:09 AM
可以在浏览器上搜索MySQL Date Format String获取更多函数
5-计算日期和时间|Calculating Dates and Times
如果我们想在日期的基础上增加一天或一个小时应当怎么做?
- SELECT DATE_ADD(NOW(),INTERVAL 1 DAY)得到2023-06-09 10:14:52
- SELECT DATE_ADD(NOW(),INTERVAL 1 YEAR)得到2024-06-08 10:14:52
- SELECT DATE_ADD(NOW(),INTERVAL -1 YEAR)=SELECT DATE_SUB(NOW(),INTERVAL 1 YEAR)得到2022-06-08 10:14:52
如果我们想计算日期间隔应当怎么做?
- SELECT DATEDIFF('2019-01-05','2019-01-01')得到4
注意:
如果DATEDIFF后面接的两个日期值对调,则会得到-4
且这个函数只返回天数的间隔,而不是小时或分钟
如果我们想计算时间间隔应当怎么做?
- SELECT TIME_TO_SEC('09:00')得到32400,这个就是从00:00起流逝的秒数
- SELECT TIME_TO_SEC('09:00')-TIME_TO_SEC('09:02')得到-120
6-IFNULL和COALESCETHE函数|IFNULL and COALESCE Functions
IFNULL:表中有些order没有shipper_id,现在想让这些空值显示为NOT assigned:
COALESCE:shipper_id是null时,返回comments列的值,而如果comments列的也是null,那就返回NOT assigned:
练习:
7-IF函数|The IF Functions
假设我们想把order表分成两个组别,如果是今年的订单就放在“Active”里,不然就放在“Archived”里。之前学习过用Union运算符合并结果,现在用IF函数(IF(expression,first,last))。
练习:
8-CASE运算符|The CASE Operator
在学完上面的IF之后,如果我们有好几个表达式需要测试怎么办?
练习: