MySQL(四):函数

一、统计函数(上篇已讲)

二、字符串函数

bash 复制代码
#演示字符串相关函数的使用

-- 1\使用charset(str)返回字串字符集
SELECT CHARSET(ename) FROM emp;

-- concat(str2,[, ...]连接字串
SELECT CONCAT(ename,'工作是',job) FROM emp;

-- INSTR('str','substr') 返回substr 在str中出现的位置,没有返回0
-- DUAL 亚元表,系统表 可以作为测试表使用
SELECT INSTR('hanshunping','ping')FROM DUAL;

-- UCASE(str) 转大写,LCASE(str) 转小写
SELECT UCASE(ename) FROM emp;
SELECT LCASE(ename) FROM emp;

-- LEFT(string2,length) 从string2中的左边起取length个字符 从右边取:RIGHT(str,length);
SELECT LEFT(ename,2) FROM emp;

-- LENGTH(str) str长度
SELECT LENGTH(ename) FROM emp;


-- REPLACE(str,search_str,replace_str) 在str中用replace_str替换search_str
SELECT ename,REPLACE(job,'MANAGER','经理') FROM emp;

-- STRCMP(str1,str2) 逐字比较两个字符大小,相等为0,不相等为1
SELECT STRCMP('hsp','asp') FROM DUAL;

-- SUBSTRING(str,position [,length]) 从str的position开始(从1开始计算】,取length个字符
SELECT SUBSTRING(ename,1,2) FROM emp;/*从ename的第一个位置取2个字符*/

-- LTRIM(str1) RTRIM(str1) TRIM(str)  去除前端空格或后端空格
SELECT LTRIM('  韩顺平教育') FROM DUAL;
SELECT RTRIM('韩顺平  ') FROM DUAL;
SELECT TRIM('  含  ') FROM DUAL;


-- 练习:以首字母小写的方式显示所有员工emp的姓名str.sql;
SELECT REPLACE(ename,LEFT(ename,1),LCASE(LEFT(ename,1))) FROM emp;
SELECT CONCAT(LCASE(SUBSTRING(ename,1,1)),SUBSTRING(ename,2)) AS new_name FROM emp;

三、数学函数

bash 复制代码
#演示数学相关函数
-- ABS(num)  绝对值
SELECT ABS(-10) FROM DUAL;


-- BIN(decimal_number) 十进制转二进制

SELECT BIN(10) FROM DUAL;

-- CEILING(num) 向上取整,得到比num大的最小整数

SELECT CEILING(-2.5) FROM DUAL;

-- CONV(num2,from_base,to_base)  进制转换
SELECT CONV(16,16,2) FROM DUAL;
  -- 把10从10进制转为2进制

-- floor(num) 向下取整。得到比num2小的最大整数
SELECT FLOOR(1.5) FROM DUAL;

-- fromat(nums,decimal_places)  保留小数位数  四舍五入
SELECT FORMAT(AVG(sal),1) AS avg_sal FROM emp;
SELECT FORMAT(1.2347242,3) FROM DUAL;
-- HEX(decinalNumber) 转十六进制
SELECT HEX(11) FROM DUAL;

-- LEAST(num1,num2,..) 求最小值
SELECT LEAST(1,10,3) FROM DUAL;
 -- mod(numerator,denominator)  求余
 SELECT MOD(10,3) FROM DUAL;
 
 -- RAND([seed]) 返回随即数,0<v<1.0
 SELECT RAND() FROM DUAL;
 SELECT RAND(3) FROM DUAL;
	-- 使用RAND()每次返回不同的随机数,在【0,1.0】范围内
	-- 使用RAND(seed)返回【0,1.0】随机数,seed不变,该随机数也不变。

四、时间日期



bash 复制代码
#演示时间函数

SELECT CURRENT_DATE() FROM DUAL;  /*当前日期*/

SELECT CURRENT_TIME() FROM DUAL;  /*当前时间*/

SELECT CURRENT_TIMESTAMP()  FROM DUAL; /*当前时间戳 年月日 时分秒*/


-- 创建测试表
CREATE TABLE mes(
	id INT,
	content VARCHAR(30),
	sent_time DATETIME);
	

INSERT INTO mes
	VALUES(1,'北京时间',CURRENT_TIMESTAMP()),
	(2,'上海新闻',NOW()),
	(3,'广州新闻',NOW());
SELECT * FROM mes;
DELETE FROM mes 
	WHERE `sent_time`='2024-08-05 12:24:38';

SELECT NOW() FROM DUAL;

-- 1\显示所有新闻信息,发布时间只显示日期,不显示时间
SELECT id,content,DATE(sent_time) FROM mes;

-- 2\请查询在10分种内发布的新闻
SELECT * FROM mes
	WHERE DATE_ADD(sent_time,INTERVAL 10 MINUTE) >=NOW();
		-- 从sent_time加10分钟>=现在的时间,说明在10分钟内
	
SELECT * FROM mes
	WHERE DATE_SUB(NOW(),INTERVAL 10 MINUTE) <=sent_time;
		-- 从now()-10分钟<=发送的时间,说明在10分钟内
	
-- 求2011-11-11到1990-1-1 相差多少天

SELECT DATEDIFF('2011-11-11','1990-1-1') FROM DUAL;
-- 我活了多少天
SELECT DATEDIFF(NOW(),'2001-5-27') FROM DUAL;

-- 能活90,还剩是多少天
-- year :可以是年月日 时分秒
-- 前面一项也可以是time datetime,date
SELECT DATEDIFF(DATE_ADD('1986-11-11',INTERVAL 90 YEAR),NOW()) FROM DUAL;

SELECT TIMEDIFF('10:11:11','6:11:11') FROM DUAL;


-- YEAR|MONTH|DAY|DATE(datetime) 只显示年|月|日|日期
SELECT YEAR(NOW()) FROM DUAL;

-- unix_timestamp():返回1970-1-1到现在的秒数
SELECT UNIX_TIMESTAMP()/(24*3600*365) FROM DUAL;
SELECT UNIX_TIMESTAMP() FROM DUAL;

-- from_unixtime():可以啊unix_timestamp秒数转成指定格式的日期
-- 意义:在开发中,可以存放一个整数,通过from_unixtime()转成时间
SELECT FROM_UNIXTIME(1722845546,'%Y-%m-%d %H:%i:%S') FROM DUAL;

五、加密函数

bash 复制代码
#演示加密函数和系统该函数

-- USER()擦汗寻用户
	-- 查询登录到mysql的有哪些用户,以及登录的ip

SELECT USER() FROM DUAL;

-- datebase() 查询当前数据库名称
SELECT DATABASE();

-- MD5(str)  为字符串算出一个MD5 32的字符串,常用(用户密码)加密
-- root 密码是123456-> 加密md5 ->在数据库中存放的是加密后的密码
SELECT MD5('123456') FROM DUAL;
SELECT LENGTH(MD5('123456')) FROM DUAL;

-- 演示用户表,存放密码时,是md5
CREATE TABLE users3(
	`id` INT,
	`name` VARCHAR(32) NOT NULL DEFAULT ' ',
	`pwd` CHAR(32) NOT NULL DEFAULT ' ');
INSERT INTO users3 VALUES(1,'Alice',MD5('Alice'));
SELECT * FROM users3;

SELECT * FROM users3
	WHERE `name`='Alice' AND pwd=MD5('Alice');
	
-- PASSWORD(str) 加密函数,mysql数据库的用户密码就是PASSWORD函数加密的
-- select password('css01') from dual; -- 数据库的密码 $A$005$-%AjIyt,81EeU;bk5DqTFCW9UH/oalNCfwYrpKeHb72ChqXuEVtZtSczhJD


-- select * from mysql.user \G 从原文密码str计算并返回密码字符串
-- 通常用于对mysql 数据库的用户密码加密
-- mysql.user 表示数据库.表
SELECT * FROM mysql.user;

六、流程控制

bash 复制代码
#演示流程控制函数

-- IF(expr1,expr2,expr3)  如果expr1为TRue,则返回expr2,否则返回expr3
SELECT IF(TRUE,'北京','上海') FROM DUAL;

-- IFNULL(expr1,expr2) 如果expr1不为空NULL,则返回expr1,否则返回expr
SELECT IFNULL('北京','上海') FROM DUAL;

-- select case when expr1 then expr2
--	when expr3 then expr4 else expr5 end;
-- 如果expr1为真返回expr2,如果expr3为真,返回expr4,否则返回expr5

SELECT CASE
	WHEN TRUE THEN 'jack'
	WHEN FALSE THEN 'Tom' 
	ELSE 'Alice' END;

#案例
-- 1\查询emp表,如果comm是null,则显示0.0
-- IF判断是否为NULL,用is NULL,是否为空 用is not
SELECT ename,IFNULL(comm,0.0) FROM emp;
SELECT ename,IF(comm IS NULL,0.0,comm) FROM emp;

-- 2\如果emp表的job是clerk则显示职员,如果是manager则显示经历,如果是salesman则显示销售,其他正常显示
SELECT ename,(SELECT CASE
	WHEN job='CLERK' THEN '职员'
	WHEN job='MANAGER' THEN '经理'
	WHEN job='SALESMAN' THEN '销售'
	ELSE job END) AS job
	FROM emp;
相关推荐
问道飞鱼22 分钟前
【知识科普】认识正则表达式
数据库·mysql·正则表达式
HaiFan.29 分钟前
SpringBoot 事务
java·数据库·spring boot·sql·mysql
水根LP4932 分钟前
linux系统上SQLPLUS的重“大”发现
数据库·oracle
途途途途1 小时前
精选9个自动化任务的Python脚本精选
数据库·python·自动化
04Koi.2 小时前
Redis--常用数据结构和编码方式
数据库·redis·缓存
silver98862 小时前
mongodb和Cassandra
数据库
PersistJiao2 小时前
3.基于 Temporal 的 Couchbase 动态 SQL 执行场景
数据库·sql
上山的月2 小时前
MySQL -函数和约束
数据库·mysql
zhcf2 小时前
【MySQL】十三,关于MySQL的全文索引
数据库·mysql
极限实验室2 小时前
Easysearch Chart Admin 密码自定义
数据库