1、数值函数
四舍五入:ROUND(数值,精准度<小数点后几位>)
SELECT ROUND(7.7)
SELECT ROUND(7.75,1)
截取:TRUNCATE(数值,保留小数点后几位,移除其他位数)
SELECT TRUNCATE(9.4312,1) --9.4
上限函数:CEILING()<返回大于或等于这个数字的最小整数>
SELECT CEILENG(5.6) --6
地板函数:FLOOR()<返回小于或等于这个函数的最大整数>
SELECT FLOOR(7.3) --7
绝对值: ABS()
SELECT ABS(-5.2) --5.2
生成0-1之间的随机浮点数: RAND()
SELECT RAND()
2、字符串函数
处理字符串值的函数
得到字符串中的字符数:LENGTH()
SELECT LENGTH('sky') --3
字符串装换大写:UPPER()
SELECT UPPER('sky') --SKY
字符串转换小写:LOWER()
SELECT UPPER('SKY') --sky
一处字符串左侧空白字符或其它预定义字符:LTRIM()
SELECT LTRIM(' Sky') --Sky
一处字符串右侧空白字符或其它预定义字符:RTRIM()
SELECT RTRIM('Sky ') --Sky
删除所有前后的空格:TRIM()
SELECT TRIM(' sky ') --sky
返回字符串左侧的几个字符:LEFT()
SELECT LEFT('abcdef',3) ---abc
返回字符串右侧的几个字符:RIGHT()
SELECT RIGHT('abcdef',2) --ef
字符截取函数:SUBSTRING('字符串',开始位数,截取几位<不写就是截取开始位数后所有>)
SELECT SUBSTRING('abcdef',3,2) --cd
第一个字符或者一串字符匹配位置 LOCATE('搜索字符或字符串','被锁搜的字符串')
<搜索不到显示0,不区分大小写>
SELECT LOCATE('c','abcdef') --3
SELECT LOCATE('def','abcdef') --4
替换一个字符或者一串字符:REPLACE('原字符串','被替换的字符串','替换的字符串')
SELECT REPLACE('Kindergarten','garten','garden') --Kindergarden
串联两个字符串:CONCAT()
SELECT CONCAT('first','last') --firstlast
3、日期函数
调用当前日期和时间:NOW()
SELECT NOW()
调用日期:CURDATE()
SELECT CURDATE()
返回当前时间:CURTIME()
SELECT CURTIME()
获取当前年份 YEAR( )
SELECT YEAR( NOW() )
获取当前月份 MONTH( )
SELECT MONTH( NOW() )
获取当前日期 DAY()
SELECT DAY( NOW() )
获取当前时刻 HOUR()
SELECT HOUR( NOW() )
获取当前星期 DAYNAME( )
SELECT DAYNAME( NOW() )
获取当前月份 MONTHNAME( )
SELECT MONTHNAME( NOW() )
自定义获取: EXTRACT(想获取的单位 FROM 时间日期值)
SELECT EXTRACT( YEAR FROM NOW() )
4、格式化日期和时间
SELECT DATA_FORMAT(NOW(),'%y') --%y 代表两位的年份 --输出结果是22
SELECT DATA_FORMAT(NOW(),'%Y') --%Y 代表四位的年份 --输出结果是2022
SELECT DATA_FORMAT(NOW(),'%m') --%m 代表月份 --输出结果是01
SELECT DATA_FORMAT(NOW(),'%M') --%M 代表月份 --输出结果是January
SELECT DATA_FORMAT(NOW(),'%d') --%d 代表日 --输出结果为06
5、计算日期和时间
当前日期增加一天
SELECT DATE_ADD( NOW(),INTERVAL 1 DAY )
当前日期增加一年
SELECT DATE_ADD( NOW(),INTERVAL 1 YEAR)、
当前日期减去一年
SELECT DATE_SUB( NOW(),INTERVAL 1 YEAR)
两个日期相距的天数 DATEDIFF()
SELECT DATEDIFF('1999-01-04','1999-01-05') --1
两个时间间的间隔 TIME_TO_SEC()
SELECT TIME_TO_SEC('09:00') --32400<从零点开始到9;00的秒数>
SELECT TIME_TO_SEC('09:00') - TIME_TO_SEC('09:02') -- -120
6、IFNULL和COALESCE函数
IFNULL
如果 shipper_id 为空就返回 未分配
SELECT
order_id,
IFNULL(shipper_id,'未分配')
FROM ORDERS
COALESCE
如果 shipper_id 成为空就返回 comments,如果comments为空就返回'未分配'
SELECT
order_id,
COALESCE(shipper_id,comments,'未分配')
FROM ORDERS
7、IF函数
如果YEAR(order_Data) = YEAR(NOW()) 这个条件为真返回 活跃 如果为假返回 归档
SELECT
order_id,
order_data,
IF(
YEAR(order_Data) = YEAR(NOW()),
'活跃',
'归档'
)
8、CASE运算符
如果 YEAR(order_data) = YEAR(NOW()) 成立 返回 活跃
如果 YEAR(order_data) = YEAR(NOW()) - 1 成立 返回 去年
如果 YEAR(order_data) < YEAR(NOW()) - 1 成立 返回 归档
如果都不成立 返回 未来
SELECT
order_id,
CASE
WHEN YEAR(order_data) = YEAR(NOW()) THEN '活跃'
WHEN YEAR(order_data) = YEAR(NOW()) - 1 THEN '去年'
WHEN YEAR(order_data) < YEAR(NOW()) - 1 THEN '归档'
ELSE '未来'
END
FROM orders