mysql 函数

判空函数

-- 为null时,显示后面的值
SELECT IFNULL(expression, alt_value);
SELECT IFNULL(NULL,'这个值为空');
判断函数

select case 
    when 2 < 0 then 'a小于0'
    when 2 > 0 then 'a大于0'
    else 'a为0'
    end ;
    
SELECT IF(TRUE,'真的','假的');
字符串函数

SELECT lower('SQL Course') ;  -- 小写
SELECT upper('SQL Course') ;  -- 大写
select CONCAT('a','b','c') ; -- 拼接,有任何参数为null,则函数返回null
SELECT CONCAT_WS(',','FirstName','xjdlf');  -- 拼接 带给定的分隔符

SELECT SUBSTRING('hello world',5,3);  -- 从第5个位置起,取3个字符
SELECT SUBSTRING('hello world',-3);   --  取最后3个字符
SELECT LEFT('www.yuanrengu.com',8)       -- 从左开始截取字符串  即:left(被截取字符串, 截取长度)
SELECT RIGHT('www.yuanrengu.com',6)      --从右开始截取字符串  即:right(被截取字符串, 截取长度)
SELECT LENGTH('we');    -- 返回长度,2
SELECT LENGTH('你好');   -- 返回长度,6
SELECT char_length('你好');  -- 返回长度,2

 

日期函数

-- 当时时间 
select CURDATE();  -- 日期
select now();  -- 当前时间
select SYSDATE();	-- 当前时间
CURRENT_TIMESTAMP()、CURRENT_TIMESTAMP,LOCALTIME()、LOCALTIME、LOCALTIMESTAMP()、LOCALTIMESTAMP;

-- 格式化时间
SELECT DATE_FORMAT(NOW(),"%Y-%m-%d");
SELECT DATE_FORMAT(NOW(),'%Y-%m-%d %H:%i:%s')

-- 字符串转日期
SELECT STR_TO_DATE('2019-01-20 16:01:45', '%Y-%m-%d %H:%i:%s');

-- 将时间戳格式化
SELECT FROM_UNIXTIME(unix_timestamp(),'%Y-%m-%d %H:%i:%s')

 

日期比较

-- 取年份 月份 日
SELECT YEAR(NOW());
year() , month(),dayofmonth();

-- 取某个月的第一天
select date_sub('2021-07-08', interval day('2021-07-08') - 1 day);

-- 取某个月的最后一天
select last_day('2021-07-08');

-- 取某个月的下个月第一天 
select date_add(last_day('2021-07-08'),interval 1 day);


-- 整个月的数据
select * from test01
where date_time between date_sub('2021-07-08',interval day('2021-07-08') day )
  and  date_add(last_day('2021-07-08'),interval 1 day) ;
  
-- mysql 时间相减 得到秒数
select t.date_time2-t.date_time as time from test01 t;

-- 返回相差天数(可以为负整数)
SELECT DATEDIFF('2021-02-02 12:00:00' , '2020-09-12 13:09:23');

-- 日期加减
 select date_add('1970-1-1', interval 10 year); 
 SELECT DATE_ADD('1991-02-12',INTERVAL 10 MONTH);
 SELECT DATE_SUB('1999-01-01',INTERVAL 10 DAY) ;
 SELECT DATE_ADD(NOW(),INTERVAL 12 HOUR);
 SELECT DATE_ADD(NOW(),INTERVAL -10 minute);

 

聚合函数

count(列名)	统计记录的条数
max(列名)	求这一列中的最大值,用于数值列
min(列名)	求这一列中的最小值
avg(列名)	求这一列的平均值
sum(列名)	求这一列的总和

 随机数

SELECT UUID();

数字函数

CEIL(x)	返回大于或等于 x 的最小整数 
FLOOR(x)	返回小于或等于 x 的最大整数 
GREATEST(expr1, expr2, expr3, ...)	返回列表中的最大值
LEAST(expr1, expr2, expr3, ...)	返回列表中的最小值
MOD(x,y)	返回 x 除以 y 以后的余数 
POW(x,y)	返回 x 的 y 次方 
RAND()     	返回 0 到 1 的随机数  
ROUND(x)	x四舍五入
TRUNCATE(x,y)	返回数值 x 保留到小数点后 y 位的值(与 ROUND 最大的区别是不会进行四舍五入)

-- ROUND 函数用于把数值字段舍入为指定的小数位数
select round(12.00999,2);   -- 12.01

格式化数字

-- 格式化浮点数(四舍五入保留length位小数)
select format(number, length);
select format(23232.0, 2);  -- 23,232.00
select format(23232.123333, 2);  -- 23,232.12

 

行拼接成一列

select group_concat(id) from answer where subject_id = 1;
select group_concat(id) from answer group by subject_id ;

 

FIND_IN_SET   相当于自动分割字符串

select * from dept where FIND_IN_SET(id,'1000,1001,1002'); 

 

mysql 8.0 后才支持函数索引

posted @ 2021-12-06 18:20  得好好活  阅读(36)  评论(0)    收藏  举报