MySQL的常用函数

发布于:2022-11-09 ⋅ 阅读:(420) ⋅ 点赞:(0)

一、字符串函数

函数 描述
CONCAT(s1,s2,…,sn) 连接s1,s2,…,sn为一个字符串
CONCAT_WS(separator,s1,s2,…,sn) 连接s1一直到sn,并且中间以separator作为分隔符
CHAR_LENGTH(s) 返回字符串s的字符数
LENGTH(s) 返回字符串s的字节数,和字符集有关
INSERT(str,index,len,instr) 将字符串str从第index位置开始,len个字符长的子串替换为字符串instr
UPPER(s)或UCASE(s) 将字符串s的所有字母转换成大写字母
LOWER(s)或LCASE(s) 将字符串s的所有字母转换成小写字母
LEFT(s,n) 返回字符串s最左边的n个字符
RIGHT(s,n) 返回字符串s最右边的n个字符
LPAD(str,len,pad) 用字符串pad对str最左边进行填充,直到str的长度为len个字符
RPAD(str,len,pad) 用字符串pad对str最右边进行填充,直到str的长度为len个字符
LTRIM(s) 去掉字符串s左侧的空格
RTRIM(s) 去掉字符串s右侧的空格
TRIM(s) 去掉字符串s开始与结尾的空格
TRIM([BOTH] s1 FROM s) 去掉字符串s开始与结尾的s1
TRIM([LEADING] s1 FROM s) 去掉字符串s开始处的s1
TRIM([TRAILING] s1 FROM s) 去掉字符串s结尾处的s1
REPEAT(str,n) 返回str重复n次的结果
REPLACE(str,a,b) 用字符串b替换字符串str中所有出现的字符串a
STRCMP(s1,s2) 比较字符串s1,s2
SUBSTRING(s,index,len) 返回从字符串s的index位置的len个字符
-- 用户表
CREATE TABLE t_user (
  id INT(11) NOT NULL AUTO_INCREMENT,
  uname VARCHAR(40) DEFAULT NULL,
  age INT(11) DEFAULT NULL,
  sex INT(11) DEFAULT NULL,
  PRIMARY KEY (id)
);

INSERT  INTO t_user VALUES (NULL,'zs',18,1);
INSERT  INTO t_user VALUES (NULL,'ls',20,0);
INSERT  INTO t_user VALUES (NULL,'ww',23,1);
INSERT  INTO t_user VALUES (NULL,'zl',24,1);
INSERT  INTO t_user VALUES (NULL,'lq',15,0);
INSERT  INTO t_user VALUES (NULL,'hh',12,0);
INSERT  INTO t_user VALUES (NULL,'wzx',60,NULL);
INSERT  INTO t_user VALUES (NULL,'lb',NULL,NULL);

-- 1. 使用concat函数显示出  你好,uname 的结果
SELECT CONCAT("你好,",uname) FROM t_user

-- 2. 使用concat_ws函数显示出 你好,uname ,很高兴认识你的结果
SELECT CONCAT_WS(",","你好",uname,"很高兴认识你") FROM t_user

-- 3. 将字符串hello 转换为大写显示
SELECT UPPER("hello")

-- 4. 查询所有用户名,将用户名显示为大写
SELECT UPPER(uname) FROM t_user

-- 5. 查询所有用户名,去掉左右两端的空格
SELECT TRIM(uname) FROM t_user

-- 6. 获取 hello,world 从第二个字符开始的完整子串
SELECT SUBSTRING("hello,world",2)

-- 7. 获取hello,world 从第二个字符开始但是长度为4的子串
SELECT SUBSTRING("hello,world",2,4)

二、数值函数

函数 用法
ABS(x) 返回x的绝对值
CEIL(x) 返回大于x的最小整数值
FLOOR(x) 返回小于x的最大整数值
MOD(x,y) 返回x/y的模
RAND() 返回0~1的随机值
ROUND(x,y) 返回参数x的四舍五入的有y位的小数的值
TRUNCATE(x,y) 返回数字x截断为y位小数的结果
SQRT(x) 返回x的平方根
POW(x,y) 返回x的y次方
-- 数值函数
-- 1. 获取-12的绝对值
SELECT ABS(-12)

-- 2. 将-11.2向上取整
SELECT CEIL(-11.2)

-- 3. 将1.6向下取整
SELECT FLOOR(1.6)

-- 4. 获得2的32次幂的值
SELECT POW(2,32)

-- 5. 获得一个在0~100之间的随机数
SELECT RAND()*100

-- 获取1~100的随机整数
SELECT CEIL(RAND()*100)

三、日期函数

函数 用法
CURDATE()或CURRENT_DATE() 返回当前日期
CURTIME()或CURRENT_TIME() 返回当前时间
NOW()/SYSDATE()/CURRENT_TIMESTAMP()/LOCALTIME()/LOCALTIMESTAMO() 返回当前系统日期时间
YEAR(date)/MONTH(date)/DAY(date)/HOUR(time)/MINUTE(time)/SECOND(time) 返回具体的时间值
WEEK(date)/WEEKOFYEAR(date) 返回一年中的第几周
DAYOFWEEK() 返回今天是一周的第几天,注意:周日是1,周一是2,…周六是7
WEEKDAY(date) 返回周几,注意,周一是0,周二是1,…周日是6
DAYNAME(date) 返回星期:MONDAY,TUESDAY,…SUNDAY
MONTHNAME(date) 返回月份:January,…
DATEDIFF (date1,date2)/TIMEDIFF(time1,time2) 返回date1-date2的日期间隔、返回time1-time2的时间间隔
DATE_ADD(datetime,INTERVAL exprtype) 返回与给定日期时间相差INTERVAL时间段的日期时间
DATE_FORMAT(datetime.fmt) 按照字符串fmt格式化日期datetime值
STR_TO_DATE(str,fmt) 按照字符串fmt对str进行解析,解析为一个日期
格式符 说明
%Y 4位数字表示年份
%y 表示两位数字表示年份
%M 月名表示月份(January,…)
%m 两位数字表示月份(01,02,03…)
%b 缩写的月名(Jan,Feb,…)
%c 数字表示月份(1,2,3…)
%D 英文后缀表示月中的天数(1st,2nd,3rd…)
%d 两位数字表示月中的天数(01,02…)
%e 数字形式表示月中的天数(1,2,3,4,5…)
%H 两位数字表示小数,24小时制(01,02…)
%h和%I 两位数字表示小时,12小时制(01,02…)
%k 数字形式的小时,24小时制(1,2,3…)
%I 数字形式表示小时,12小时制(1,2,3,4…)
%i 两位数字表示分钟(00,01,02)
%S和%s 两位数字表示秒(00,01,02…)
%W 一周中的星期名称(Sunday…)
%a 一周中的星期缩写(Sun,Mon,Tues,…)
%w 以数字表示周中的天数(0=Sunday,1=Monday…)
%j 以3位数字表示年中的天数(001,002…)
%U 以数字表示年中的第几周(1,2,3…),其中Sunday为周中第一天
%u 以数字表示年中的第几周(1,2,3…)其中Monday为周中第一天
%T 24小时制
%r 12小时制
%p AM或PM
%% 表示%
-- 日期函数
-- 1. 将当前时间转成字符串
SELECT DATE_FORMAT(LOCALTIME(),"%Y-%m-%d %H:%i:%S")

-- 2. 获取当前日期
SELECT CURDATE()

-- 3. 获取当前时间
SELECT CURTIME()

-- 4. 获取当前的日期时间
SELECT NOW()

-- 5. 获取到元旦还有多少天
SELECT DATEDIFF("2023-01-01",NOW())

-- 6. 一年后的现在的日期时间
SELECT DATE_ADD(NOW(),INTERVAL 1 YEAR)

四、流程函数

函数 用法
IF(value,t,f) 如果value是真,返回t,否则返回f
IFNULL(value1,value2) 如果value1不为空,返回value1,否则返回value2
CASE WHEN 条件1 THEN result1 WHEN 条件2 THEN result2…[ELSE result] END 相当于Java中的if…else if …else…
CASE expr WHEN 常量值1 THEN 值1 WHEN 常量值2 THEN 值2 … [ELSE 值n ] END 相当于Java中的switch … case …
-- 流程函数
-- 1. 获取用户的姓名、性别,如果性别为1则显示1,否则显示0;要求使用if函数查询
SELECT uname,IF(sex=1,1,0) FROM t_user

-- 2. 获取用户的姓名、性别,如果性别为null则显示为1:要求使用ifnull函数查询
SELECT uname,IFNULL(sex,1) FROM t_user

-- 3. 查询用户的年龄,如果年龄<=12岁就是儿童,<=18岁就是少年,<=40岁就是中年,其他就是老年
-- 使用case when进行查询到的内容是单独作为一个字段存在的,所以跟其他字段要用逗号,分割
SELECT uname,age,CASE WHEN IFNULL(age,0)<=12 THEN '儿童'
		      WHEN age<=18 THEN '少年'
		      WHEN age<=40 THEN '中年'
		      ELSE '老年' END "描述"
FROM t_user

五、其他函数

函数 用法
database() 返回当前数据库名
version() 返回当前数据库版本
user() 返回当前登录用户名
password(str) 返回字符串str的加密版本,41位长的字符串
md5(str) 返回字符串str的md5值,也是一种加密方式
本文含有隐藏内容,请 开通VIP 后查看