006 学习笔记--内置函数 | 字符串函数 + 数值函数 + 日期函数 + 流程控制函数(if ifnull case)

发布时间 2023-07-07 14:31:10作者: sunwugang

函数:是指一段可以直接被另一段程序调用的程序或代码。

MySQL内置函数:

 字符串函数

-- -----------------------------mysql 内置函数--字符串函数-----------------------------
-- 字符串拼接
-- CONCAT(str1,str2,...)
select CONCAT('I',' love',' you'); -- return I love you

-- 字符串转小写
-- LOWER(str)
select LOWER('I LOVE YOU'); -- return i love you

-- 字符串转大写
-- UPPER(str)
select UPPER('I LOVE YOU'); -- return i love you

-- 左填充,用字符串padstr对str的左边进行填充,达到n个字符串长度
-- LPAD(str,len,padstr)
select LPAD('1',4,0); -- return 0001

-- 右填充,用字符串padstr对str的右边进行填充,达到n个字符串长度
select RPAD('1',4,0) -- RETURN 1000

-- 去掉字符串开始和结尾的空格
-- select TRIM([remstr FROM] str)
select trim('  I love you  ') -- I love you

-- 返回从字符串str从start位置开始起的len个长度的字符串
-- select SUBSTRING(str,pos,len)
select SUBSTR('hello world',1,5) -- return hello 索引从 1 开始

数值函数:

-- -----------------------------mysql 内置函数--数值函数-----------------------------
-- 向上取整
SELECT CEIL(1.1) as count; -- RETURN 2

-- 向下取整
select FLOOR(1.8) count; -- return 1

-- 返回X/Y的摸
select MOD(10,2),MOD(3,3),MOD(3,2),MOD(3,6),MOD(3,9),MOD(5,9)

-- RAND() 返回0-1内的随机数
SELECT RAND() 随机数;
-- 求参数X 的四舍五入的值,保利y为小数
-- select ROUND(X)
-- SELECT ROUND(X,D)
select ROUND(1.44) return1,ROUND(1.51) return2,ROUND(1.444,2)return1点44

-- 案例,通过数据库函数,生成一个6位数的随机验证码
select RAND()*1000000 as 随机六位整数和小数
-- 保四舍五入,留一位小数
select ROUND(RAND()*1000000,0)六位验证码,ROUND(RAND()*100000000,0)八位验证码;
-- 补位法
select LPAD(ROUND(RAND()*100000,0),6,'9') -- 长度不够,用9补
select RPAD(ROUND(RAND()*100000,0),6,'9') -- 长度不够,用9补
select LPAD(ROUND(RAND()*100000,0),8,'9'); -- 长度不够,用9补
select RPAD(ROUND(RAND()*100000,0),8,'9'); -- 长度不够,用9补

日期函数:

-- -----------------------------mysql 内置函数--日期函数-----------------------------
-- 返回当前日期
select CURDATE(),CURRENT_DATE();
-- 返回当前时间
select CURTIME();
-- 字符串拼接
select CONCAT(CURDATE(),' ',CURTIME())
-- 返回当前日期+时间
select NOW();
-- 格式化周几
SELECT DATE_FORMAT(NOW(),'%W'); -- Friday
SELECT DATE_FORMAT('2021-11-11','%W');

-- 日期格式化 | 将时间格式化为 YYYY-mm-dd HH:ii:ss 格式
SELECT DATE_FORMAT(NOW(),'%Y-%m-%d %H:%i:%s %W');-- 2023/07/07 13:40:19 Friday
-- 将时间格式化为 YYYY/mm/dd HH:ii:ss
SELECT DATE_FORMAT(NOW(),'%Y/%m/%d %H:%i:%s %W'); -- 2023/07/07 13:40:19 Friday

select YEAR(NOW()) 年;
select MONTH(NOW())月;
select DAY(NOW()) 日;
-- 注:星期天为第一天
select DAYNAME(NOW()) 星期几,DAYOFMONTH(NOW())月份,DAYOFWEEK(NOW())周第几天,DAYOFYEAR(NOW())一年的第多少天;
SELECT DAYNAME('2021-11-11');
SELECT WEEKDAY('2021-11-11');

-- DATE_ADD(date,INTERVAL expr unit)
-- DATE_SUB(date,INTERVAL expr unit)
-- DATE_ADD() 函数向日期添加指定的时间间隔。
-- date 参数是合法的日期表达式。expr 参数是您希望添加的时间间隔。
-- https://www.runoob.com/sql/func-date-add.html
select date_add('2013-01-18', interval '1,2' YEAR_MONTH); -- 新增1年 2个月 ,return 2014-03-08
select date_add('2013-01-18', interval 1 YEAR_MONTH); -- 新增一个月,return 2013-02-18
select date_add('2013-02-18', interval -1 YEAR_MONTH); -- 减一个月,return 2013-01-18


-- DATEDIFF(expr1,expr2)
-- 返回开始时间和借宿时间之间的天数
select DATEDIFF('2023-07-03','2023-07-07') -- return -4


-- 获取当时时间戳10位长度
select UNIX_TIMESTAMP(now()),UNIX_TIMESTAMP()
-- 将时间戳格式化为 YYYY-mm-dd HH:ii:ss 格式日期 ---默认
SELECT FROM_UNIXTIME(UNIX_TIMESTAMP())

-- 将时间戳格式化日期(指定日期格式化格式)
SELECT FROM_UNIXTIME(UNIX_TIMESTAMP(),'%Y-%m-%d %H:%i:%s')

-- 处理13位的时间戳转换,需要手动除以 1000
SELECT FROM_UNIXTIME(1627311955999/1000,'%Y-%m-%d %H:%i:%s')

流程函数:

-- -----------------------------mysql 内置函数--流程控制函数-----------------------------
-- 条件为ture,则返回第一个参数,否则返回第二个参数
select if(1>2,'ok','error') result; -- return error

-- 第一个参数如果为 null 则范围第二个参数,否则返回第一个参数
select ifnull('','default') empty; -- 空字符串 
select ifnull(null,'default') result; -- retrun default
select ifnull('ok','default') result;  -- return ok

-- case when else end 
/*
(
case 字段 when xxx then xxx
          when xxx then xxx
				  else xxx
end
)as 重命名字段
*/
select t.*,
(case content when '001' then '一级戒备' 
              when '002' then '二级戒备'
              else '三级戒备' 
end)戒备戒备
from remarkinfo t
ORDER BY t.content;