SQL常用Api
数值类函数
ROUND
对数字进行四舍五入,第一个参数是需要四舍五入的数值,第二个参数是保留几位小数。
SELECT ROUND(5.73);--取值6
SELECT ROUND(5.73,1);--取值5.7
SELECT ROUND(5.735,2);--取值5.74
TRUNCATE
对数字进行截断,第一个参数是需要截断的数值,第二个参数是保留几位小数。
SELECT TRUNCATE(25.735,1);--取值25.7
SELECT TRUNCATE(25.75,1);--取值25.7
CEILING
对数字进行向上取整,获取大于等于它的最小整数,参数是需要截断的数值
SELECT CEILING(25.75);--取值26
SELECT CEILING(26);--取值26
字符串类函数
LENGTH
获取字符串长度
SELECT LENGTH('WANG');--4
UPPER
使每一个字符串中的英文字符变大写
SELECT UPPER('wang');--WANG
LOWER
使每一个字符串中的英文字符变小写
SELECT LOWER('WANG');--wang
TRIM
去掉字符串两侧的空格
SELECT LENGTH(TRIM(' ww '));--2
RTRIM
去掉字符串后边的空格
SELECT LENGTH(RTRIM(' ww '));--3
LEFT
截取字符串的前几个字符,第一个参数是需要截取的字符串,第二个参数是截取长度
SELECT LEFT('WANG',2);--WA
RIGHT
截取字符串的倒数几个字符,第一个参数是需要截取的字符串,第二个参数是截取长度
SELECT RIGHT('WANG',2);--NG
SUBSTRING
截取字符串,第一个参数是要截取的字符串,第二个参数是截取位置的索引(从1开始查),第三个参数是截取长度
SELECT SUBSTRING('wang',2,2);--an
SELECT SUBSTRING('wang',2);--ang
LOCATE
获取第一次遇见当前字符/字符串的下标,从1开始
第一个参数是要查找的字符/字符串,第二个参数是查找的字符字符串。
SELECT LOCATE('w','wang');--1
SELECT LOCATE('ng','wang');--3
REPLACE
替换字符,第一个参数是要替换的字符串,第二个参数是老字符/老字符串,第三个参数是新字符/字符串
SELECT REPLACE('wang','w','hu');--huang
CONCAT
字符串拼接。
SELECT CONCAT('wa','ng');--wang
SELECT CONCAT('w','a','n');--wan
日期/时间
NOW
获取当前时间年月日,时分秒。
SELECT NOW();--2021-01-01 01:02:03
CURDATE
获取年月日
SELECT CURDATE();--2021-01-01
CURDATE
获取时分秒
SELECT CURTIME();--01:02:03
YEAR/MONTH/DAY
分别返回年月日
SELECT YEAR(NOW()),MONTH(NOW()),DAY(NOW());--2021,1,1
HOUR/MINUTE/SECOND
分别返回时分秒
SELECT HOUR(NOW()),MINUTE(NOW()),SECOND(NOW());--1,2,3
DAYNAME
获取英文星期几
SELECT DAYNAME(NOW());--Monday
MONTH
获取英文月份
SELECT MONTHNAME(NOW());--January
EXTRACT
获取数字类型的日期
SELECT EXTRACT(YEAR FROM NOW());--2021
DATE_FORMAT
日期的格式化,第一个参数获取日期,第二个参数是格式化信息
其中请注意:
形式 | 寓意 | 形式 | 寓意 |
---|---|---|---|
%y | 两位数的年份比如(2021年返回21) | %Y | 四位数的年份比如(2021年返回2021) |
%m | 两位数的份比如(一月份返回01) | %M | 返回英文月份比如一月份返回(January) |
%d | 两位数的日比如(一号返回01) | %D | 返回英文日期比如(一号返回1th) |
从该网站进行查找翻阅:MySQL DATE_FORMAT() 函数
只要有这些字符便会被替换为数字,所以我们方便的进行数字格式修改。
SELECT DATE_FORMAT(NOW(),'%y:%m');--21:01
DATE_ADD
日期时间的增加。
SELECT NOW(),DATE_ADD(NOW(),INTERVAL 1 YEAR);
--2021-01-01 01:02:03, --2022-01-01 01:02:03
DATE_SUB
日期是时间的减少。
SELECT NOW(),DATE_SUB(NOW(),INTERVAL 1 YEAR);
--2021-01-01 01:02:03, --2020-01-01 01:02:03
SELECT NOW(),DATE_ADD(NOW(),INTERVAL -1 YEAR);
--2021-01-01 01:02:03, --2020-01-01 01:02:03
DATEDIFF
求两个日期相差多少天,注意早的日期在后。
SELECT DATEDIFF('2021-01-05 09:00','2021-01-01 09:01');
--4
TIME_TO_SEC
求两个日期相差多少秒,注意早的日期在前
SELECT TIME_TO_SEC('2021-01-05 09:01')-TIME_TO_SEC('2021-01-01 09:00');
--60
空值变换
IFNULL
如果这个值是空值则输出我们定义的值。
下列例子中shipper_id
字段为空的地方都变为了Not assigned
;
SELECT order_id,IFNULL(shipper_id,'Not assigned') AS shipper
FROM orders;
COALESCE
如果这个值是空值则输出另一个字段的值,如果另一个字段也是空值输出我们定义的值。
下列例子中shipper_id
字段为空的地方都变为了comments
字段的值,如果该字段也为空输出Not assigned
;
SELECT order_id,COALESCE(shipper_id,comments,'Not assigned') AS shipper
FROM orders;
IF
判断语句,第一个参数为判断条件,第二个参数为满足条件后返回的值,第三个参数为不满足条件后返回的值。
下列例子中如果是当年订单返回Active
否则返回Archived
。
SELECT order_id,order_Date,IF(YEAR(NOW())= YEAR(order_date),'Actice','Archived')
FROM orders
CASE
判断语句当有多个条件的时候使用。
CASE
开始,END
结束,WHEN
做条件,THEN
做返回值。
SELECT order_id,order_Date,
CASE
WHEN YEAR(NOW()) = YEAR(order_date) THEN 'Active'
WHEN YEAR(NOW())-1 = YEAR(order_date) THEN 'Last year'
WHEN YEAR(NOW())-1 > YEAR(order_date) THEN 'Archived'
ELSE 'Future'
END AS category
FROM orders