Mysql

关注公众号 jb51net

关闭
首页 > 数据库 > Mysql > mysql内置函数

MYSQL学习的一大重点之Mysql内置函数

作者:艾莉丝努力练剑

MySQL 数据库管理系统提供了大量的内置函数,这些函数可以帮助你执行各种数据库操作,包括数据检索、数据处理、字符串处理、数学运算、日期和时间处理等,下面是一些常用的 MySQL 内置函数类别及其简要说明

0 ~> MySQL 内置函数

0.1 日期类函数

  1. 时间获取:current_date() / current_time() / current_timestamp() / now()
  2. 日期提取:date()
  3. 日期运算:date_add() / date_sub() / datediff()

0.2 字符串类函数

0.3 数学类函数

0.4 其他系统函数

1 ~> 日期类函数

1.1 基础时间获取函数

1.1.1 current_date()

SELECT current_date();
-- 输出示例:2023-06-07

1.1.2 current_time()

SELECT current_time();
-- 输出示例:14:23:47

1.1.3 current_timestamp()

SELECT current_timestamp();
-- 输出示例:2023-06-07 14:24:55

1.1.4 now()

SELECT now();
-- 输出示例:2023-06-07 14:25:42

1.2 日期提取与运算函数

1.2.1 date(datetime)

-- 从指定时间中提取日期
SELECT date('1949-10-01 00:00:00');
-- 输出:1949-10-01
-- 嵌套使用,提取当前日期
SELECT date(now());
-- 效果等价于 current_date()

1.2.2 date_add (date, INTERVAL 值 单位)

-- 日期加10天
SELECT date_add('2017-10-28', INTERVAL 10 day);
-- 输出:2017-11-07
-- 当前时间加10分钟
SELECT date_add(now(), INTERVAL 10 minute);

1.2.3 date_sub (date, INTERVAL 值 单位)

-- 日期减10天
SELECT date_sub('2050-01-01', INTERVAL 10 day);
-- 输出:2049-12-22
-- 当前时间减2分钟(常用作“近N分钟数据查询”)
SELECT date_sub(now(), INTERVAL 2 minute);

1.2.4 datediff(date1, date2)

SELECT datediff('2010-10-10', '2016-09-01');
-- 输出:-2153(前者小于后者,结果为负)
-- 计算建国至今天数
SELECT datediff(date(now()), '1949-10-01');

1.3 实战案例

案例 1:生日表设计与数据插入

-- 建表
CREATE TABLE tmp (
    id BIGINT PRIMARY KEY AUTO_INCREMENT,
    birthday DATE NOT NULL
);
-- 规范插入:使用日期函数/date()包裹,避免隐式转换warning
INSERT INTO tmp(birthday) VALUES(current_date());
INSERT INTO tmp(birthday) VALUES(date(current_timestamp()));
INSERT INTO tmp(birthday) VALUES('1980-01-01');

案例 2:留言表与时间范围查询

-- 建表
CREATE TABLE msg (
    id BIGINT PRIMARY KEY AUTO_INCREMENT,
    content VARCHAR(100) NOT NULL,
    sendtime DATETIME
);
-- 插入数据
INSERT INTO msg(content, sendtime) VALUES('纸上得来终觉浅', now());
-- 需求1:只显示发布日期,不显示时间
SELECT content, date(sendtime) FROM msg;
-- 需求2:查询2分钟内发布的帖子
-- 推荐写法:字段不参与运算,可命中索引
SELECT * FROM msg WHERE sendtime > date_sub(now(), INTERVAL 2 minute);
-- 不推荐写法:字段参与运算,无法命中索引
SELECT * FROM msg WHERE date_add(sendtime, INTERVAL 2 minute) > now();

2 ~> 字符串类函数

2.1 字符集与拼接函数

2.1.1 charset(str)

SELECT charset('abcd');
-- 输出:utf8
-- 查询表字段的字符集
SELECT charset(ename) FROM emp;

2.1.2 concat(str1, str2, …)

-- 基础拼接
SELECT concat('a', 'b', 'c');
-- 输出:abc
-- 业务场景:格式化成绩展示
SELECT concat('考生姓名:', name, ',总分:', chinese+math+english) AS msg 
FROM exam_result;

2.2 查找与截取函数

2.2.1 instr(string, substring)

SELECT instr('abcd1234efg', '1234');
-- 输出:5

2.2.2 left(str, length) / right(str, length)

SELECT left('abcd1234', 3);
-- 输出:abc
SELECT right('abcd1234', 3);
-- 输出:234

2.2.3 substring(str, position [, length])

-- 从第2个字符开始,截取2个字符
SELECT substring('SMITH', 2, 2);
-- 输出:MI
-- 从第2个字符截取到末尾
SELECT substring('SMITH', 2);
-- 输出:MITH

2.3 长度与替换函数

2.3.1 length (str) 【高频考点】

SELECT length('abc');
-- 输出:3
SELECT length('你好');
-- UTF-8下输出:6
SELECT char_length('你好');
-- 输出:2

2.3.2 replace(str, search_str, replace_str)

-- 将员工姓名中的S替换为“上海”
SELECT replace(ename, 'S', '上海'), ename FROM emp;

2.4 大小写转换与比较

2.4.1 ucase(str) / lcase(str)

SELECT ucase('abcd1234ABCD');
-- 输出:ABCD1234ABCD
SELECT lcase('abcd1234ABCD');
-- 输出:abcd1234abcd

2.4.2 strcmp(str1, str2)

2.5 空格清洗函数

2.5.1 ltrim() / rtrim() / trim()

SELECT trim('  你好 hello  ');
-- 输出:你好 hello

2.6 实战案例

案例:首字母小写显示员工姓名

SELECT 
  concat(
    lcase(substring(ename, 1, 1)),  -- 首字母转小写
    substring(ename, 2)             -- 拼接剩余字符
  ) AS lower_first_ename,
  ename
FROM emp;

3 ~> 数学类函数

3.1 基础数值运算

3.1.1 abs(number)

SELECT abs(-12.3);
-- 输出:12.3

3.1.2 mod(number, denominator)

SELECT mod(-10, 3);
-- 输出:-1
SELECT mod(10, -3);
-- 输出:1

3.2 进制转换函数

3.2.1 bin(decimal_number)

SELECT bin(10);
-- 输出:1010
SELECT bin(3.14);
-- 先取整为3,输出:11

3.2.2 hex(decimalNumber)

SELECT hex(15);
-- 输出:F

3.2.3 conv(number, from_base, to_base)

-- 十进制10转二进制
SELECT conv(10, 10, 2);
-- 输出:1010
-- 十进制10转十六进制
SELECT conv(10, 10, 16);
-- 输出:A

3.3 取整与格式化

3.3.1 ceiling(number) / floor(number)

SELECT ceiling(3.1);
-- 输出:4
SELECT ceiling(-3.9);
-- 输出:-3
SELECT floor(4.9);
-- 输出:4
SELECT floor(-4.1);
-- 输出:-5

3.3.2 format(number, decimal_places)

SELECT format(3.1415926, 2);
-- 输出:3.14
SELECT format(3.1415926, 3);
-- 输出:3.142

3.4 随机数函数

3.4.1 rand()

-- 生成0~100的随机整数
SELECT floor(rand() * 100);

4 ~> 其他常用函数

4.1 系统信息函数

4.1.1 user()

SELECT user();

4.1.2 database()

SELECT database();

4.2 加密摘要函数

4.2.1 md5(str)

SELECT md5('admin');
-- 输出:21232f297a57a5a743894a0e4a801fc3

-- 用户登录校验
SELECT name FROM user 
WHERE name='李四' AND password = md5('hellobit');

4.2.2 password(str)

4.3 空值处理函数

4.3.1 ifnull(val1, val2)

SELECT ifnull(null, 10);
-- 输出:10
SELECT ifnull('abc', '123');
-- 输出:abc

4.3.2 补充:isnull (expr)

SELECT isnull(null);
-- 输出:1
SELECT isnull('abc');
-- 输出:0

到此这篇关于MYSQL学习的一大重点之Mysql内置函数的文章就介绍到这了,更多相关mysql内置函数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文