【MySQL篇】MySQL内置函数

目录

1,日期函数

2,字符串函数

3,数学函数

4,其他函数

实战OJ


1,日期函数

日期类型在之前文章【数据类型】中有描述

传送门: 【MySQL篇】数据类型_mysql 数据类型-CSDN博客

|--------------------------------------|-------------------------------------------------------|
| 函数名称 | 描述 |
| current_date() | 当前日期 |
| current_time() | 当前时间 |
| current_timestamp() | 当前时间戳 |
| date(datetime) | 返回datetime参数的部分日期 |
| date_add(date,interval d_value_type) | 在date中添加日期或时间,interval关键字后可以是:year,mintue,second,day |
| date_sub(date,interval d_value_type) | 在date中减去日期或时间,interval关键字后可以是: year,minute,second,day |
| datediff(date1,date2) | 两个日期的差,单位是天 |
| now() | 当前日期时间 |

  • 获得当前日期(年月日)

  • 获得当前日期(时分秒)

  • 获取当前日期

  • 获得时间戳

  • 在日期的基础上加上日期

  • 在日期的基础上减去时间

  • 计算两个日期之间相差多少天

案例1:创建一张生日表,记录生日

mysql> create table tmp(

-> id int primary key auto_increment,

-> birthday date);

  • 添加当前日期

mysql> insert into tmp (birthday) values (current_date());

  • 案例2:创建一张留言表

mysql> create table msg(
-> id int primary key auto_increment,
-> content varchar(30) not null,
-> sendtime datetime);

  • 插入数据

mysql> insert into msg (content,sendtime) values ('hello1',now());

mysql> insert into msg (content,sendtime) values ('hello2',now());

  • 显示所有留言信息,只显示日期,不显示时间

mysql> select content,date(sendtime) from msg;

  • 查询2分钟内发布的留言

mysql> select * from msg where date_add(sendtime,interval 2 minute)>now();

2,字符串函数

|------------------------------------------|-------------------------------|
| charset(str) | 返回str的字符集 |
| concat(string,[...]) | 连接字符串 |
| instr(str,substring) | 返回substring在str中出现的位置,没有返回0 |
| ucase(string2) | 转换成大写 |
| lcase(string2) | 转换成小写 |
| left(string2,length) | 从string2的左边起,取length个字符 |
| length(string) | string的长度,单位是字节 |
| replace(str,search_str,raplace_str) | 在str中用replace_str替换search_str |
| strcmp(string1,string2) | 比较两字符串的大小 |
| substring(string,postion,length) | 从string的postion开始,读取length个字符 |
| ltrim(string) rtrim(string) trim(string) | 去除前空格或后空格(见示例) |

示例:

  • 查看字符的编码集

  • 连接字符串
  • 判断一个字符是否在另一个字符串中出现

  • 大小写转换

  • left,right函数
  • length求字符串长度,单位是字节 (utf8下一个整数3个字节)

案例:

  • 首先创建一张员工表

  • 插入数据

  • 获取emp表的ename列的字符集 (如果表中有些部分出现乱码,可以查看插入数据的编码和mysql的编码是否一致)

mysql> select charset(ename) from emp;

  • 将emp表中所有名字中有 S的替换成 '上海'

mysql> select ename,replace(ename,'S','上海') from emp;

  • 截取emp表中ename字段的第2到3个字符

mysql> select ename,substring(ename,2,2) from emp;

  • 以首字母小写的方式显示所有员工的姓名

mysql> select concat(lcase(substring(ename,1,1)),substring(ename,2)) from emp;

3,数学函数

|--------------------------------|---------------------|
| 函数名称 | 描述 |
| abs(num) | 绝对值函数 |
| bin(decimal_number) | 十进制转二进制 |
| hex(decimal Number) | 转换成十六进制 |
| conv(number,form_case,to_base) | 进制转换 |
| ceiling(number) | 向上取整 |
| floor(number) | 向下取整 |
| format(number,decimal_places) | 格式化,保留小数位数 |
| rand() | 返回随机浮点数,范围【0.0,1.0) |
| mod(number,denominator) | 取模,求余数 |
| | |

示例:

  • 绝对值

  • 向上取整

  • 向下取整

  • 保留两位小数位数 (四舍五入)

  • 十进制转化成二进制

  • 把一个数字从一个进制转化成另一个进制

  • 转化成十六进制

  • 产生随机数

4,其他函数

  • user查询当前用户

mysql> select user();

  • md5(str)对一个字符串进行md5摘要,摘要后的得到一个32位字符串 ,可以保证用户信息的安全性

mysql> create table user(
-> id int primary key auto_increment,
-> name varchar(20),
-> password char(32) not null);

插入数据

mysql> insert into user (name,password) values ('张三',md5('12345'));
mysql> insert into user (name,password) values ('李四',md5('21090'));

  • database(),显示当前正在使用的数据库

mysql> select database();

  • ifnull(val1,val2),如果val为null,返回val2。否则返回val1

实战OJ

查找字符串中逗号出现的次数_牛客题霸_牛客网

复制代码
select id,length(string)-length(replace(string,',','')) cnt from strings;
相关推荐
随风飘的云6 小时前
MySQL的慢查询优化解决思路
数据库
IvorySQL10 小时前
PostgreSQL 技术日报 (3月7日)|生态更新与内核性能讨论
数据库·postgresql·开源
赵渝强老师10 小时前
【赵渝强老师】金仓数据库的数据文件
数据库·国产数据库·kingbase·金仓数据库
随逸17714 小时前
《Milvus向量数据库从入门到实战,手把手搭建语义检索系统》
数据库
神秘的猪头14 小时前
🚀 React 开发者进阶:RAG 核心——手把手带你玩转 Milvus 向量数据库
数据库·后端·llm
0xDevNull1 天前
MySQL索引进阶用法
后端·mysql
0xDevNull1 天前
MySQL索引用法
mysql
IvorySQL1 天前
PostgreSQL 技术日报 (3月6日)|为什么 Ctrl-C 在 psql 里让人不安?
数据库·postgresql·开源
NineData1 天前
数据库管理工具NineData,一年进化成为数万+开发者的首选数据库工具?
运维·数据结构·数据库