select ROUND(5.73,2) 四舍五入 select ROUND(5.45,1) 5.5
select TRUNCATE(5.7345,2) 保留两位小数 select TRUNCATE(5.45,1) 5.4
select CEILING(5.2) 取大于等于的最近整数 6
select FLOOR(5.2) 取小于等于的最近整数 5
select ABS(-5.2) 取绝对值
select RAND() 0和1之间的随机值
select ROUND(rand()*(max-min)+min) 取指定范围的随机数
select FLOOR(rand()*(max-min)+min) 取指定范围的随机整数
字符串函数
UPPER() LOWER()
SELECT LTRIM(" SKY") 去除前面多余空格
SELECT TRIM(" SKY") 去除多余空格
select LEFT("SKYTTT",3) 截取前面几个 SKY
select RIGHT("SKYTTT",3) 截取后面几个 TTT
select substring("SKYTTT",3) 从第三个开始截取剩下的全部 YTTT
select substring("SKYTTT",3,2) 从第3个截取2个
select LOCATE("N","kindefgaten") 3 从字符串中搜索指定字母的位置 第一个n的位置为3 如果没有返回0
select REPLACE("kindergaten","gaten","gaden") 替换字符串中的部分
select CONCAT("FIRST","last") 连接字符串
日期函数
SELECT NOW(), CURDATE(), CURTIME()
2021-06-18 13:26:28 2021-06-18 13:26:28
当前时间 当前日期 当前时分秒
SELECT Year(Now()) 当前年份
SELECT MONTHnAME(Now()) 当前月份名字
SELECT EXTRACT(DAY FROM Now()) 18
例:
SELECT *
FROM orders
where YEAR(order_date) >=YEAR(NOW())
格式化日期和时间
select DATE_FORMAT(NOW(),'%M %d %Y')
June 18 2021
select DATE_FORMAT(NOW(),'%H: %i %p')
14: 08 PM
计算日期和时间
SELECT DATE_ADD(NOW(),INTERVAL 1 YEAR) 增加1年
SELECT DATEDIFF('2019-01-05 09:00','2019-01-01 17:00') 前面的减去后面的
SELECT TIME_TO_SEC('09:02')-TIME_TO_SEC('09:00') 120 按照0点开始的秒数计算
IFNULL
select
order_id,
IFNULL(shipper_id,'Not assighed') as shipper
from orders 如果是空就会返回预设的值
COALESCE
select
order_id,
COALESCE(shipper_id,comments,'Not assighed') as shipper
from orders 如果为空,返回预设值,如果预设值为空,返回未分配
IF函数
select
order_id,
order_date,
IF(YEAR(order_date)=YEAR(NOW()),'actice','archived')
from orders
如果满足条件 返回active 否则archived
case函数
select
order_id,
case
when YEAR(order_date) =Year(NOW()) THEN 'ACTIVE'
when YEAR(order_date) =YEAR(NOW()) -1 THEN "LAST YEAR"
when YEAR(order_date) <YEAR(NOW()) -1 THEN 'Archived'
ELSE 'future'
end as category
from orders
SELECT CONCAT(first_name,'',last_name) as customer,
points,
case
when points>3000 then 'gold'
when points>=2000 then 'silver'
else 'Bronze'
end as category
from customers