【MySQL】函数

函数

在这里插入图片描述

点赞???收藏???关注???
你的支持是对我最大的鼓励,我们一起努力吧???

在mysql中其实内置了很多的函数操作,这些函数可以让我们在数据统计的时候以及查表的时候进行各自各样的操作。

1.日期函数

函数名称

描述

current_date()

当前日期

current_time()

当前时间

current_timestamp()

当前时间戳

date(datetime)

返回datetime参数的日期部分

date_add(date,interval d_value_type)

在date中添加日期或者时间 ,interval后的数值单位可以是:year、minute、second、day

date_sub(date,interval d_value_type)

在date中减去日期或者时间 ,interval后的数值单位可以是:year、minute、second、day

datediff(date1,date2)

两个日期的差,单位是天

now()

当前日期时间

获得当前日期(年月日)

select current_date();

在这里插入图片描述

获得当前时间(时分秒)

select current_time();

在这里插入图片描述

获得当前时间戳

select current_timestamp();

在这里插入图片描述

获得当前日期时间

select now();

在这里插入图片描述

截断当前时间,只获得日期部分

select date(now());

函数中可以嵌套函数

在这里插入图片描述

在日期的基础上加日期

select date_add(now(),interval 10 year);

在这里插入图片描述

在日期的基础上减去时间

select date_sub(now(),interval 10 minute);

在这里插入图片描述

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

select datediff(now(),'1949-10-01');

前面减后面

在这里插入图片描述

这些函数有什么用呢,下面有两个案例

创建一张表,记录生日

create table tmp(
     id int primary key auto_increment,
     birthday date not null #时间的类型 年月日
     );

在这里插入图片描述

虽然current_time()这里显示的是时分秒,实际上插入的时候也能插入,所有的时间在获取的时候都是年月日 时分秒,只不过显示时是不一样的。
但是不建议这样使用。

在这里插入图片描述

这里时间戳也能插入,你可以理解成隐式类型转化,birthday要的是date日期类型,那么只要你有日期就会把日期拿到。

在这里插入图片描述

建议还是匹配着使用!

创建一个留言表

平常我们评论的时候不仅有内容显示出来,还有对应的时间。

create table msg(
     id int primary key auto_increment,
     content varchar(100) not null,
     sendtime datetime #日期时间  年月日 时分秒
     );

这就是根据时间类型建立带时间的表结构

在这里插入图片描述

显示所有留言信息,发布日期只显示日期,不用显示时间

select content,date(sendtime) from msg;

在这里插入图片描述

请查询在2分钟内发布的帖子

怎么确认表中的数据是2min以内的?
在这里插入图片描述

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

在这里插入图片描述

2.字符串函数

函数名称

描述

charset(str)

返回字符串字符集(编码集)

concat(string [,…])

连接字符串

instr(string,substring)

返回substring在strign中出现的位置,没有就返回0

ucase(string)

转换成大写

lcase(string)

转换成小写

left(string,length)

从string中的左边起取length个字符

right(string,length)

从string中的右边起取length个字符

length(string)

string的长度

replace(str,search_str,replace_str)

在str中用replace_str替换search_str

strcmp(string1,string2)

逐字符比较两字符串大小

substring(str,position [,length])

从str的position开始,取length个字符

ltrim(string) rtrim(string) trim(string)

去除前空格或者后空格

charset(str) 返回字符串字符集(编码集)

获取emp表的ename列的字符集

select charset(ename) from emp;

根据字符串得到编码格式,万一表中乱码了可以确认mysql本身编码格式以及插入mysql表中特定字段的编码格式。

在这里插入图片描述

concat(string [,…]) 连接字符串

要求显示exam_result表中的信息,显示格式:“XXX的语文是XXX分,数学XXX分,英语XXX分”

select concat(name,'的语文是',chinese,'分,','数学','math','分,','英语',english,'分') from exam_result;

在这里插入图片描述

instr(string,substring)返回substring在strign中出现的位置,没有就返回0,注意细节没有就返回0

因为出错返回是0,所以位置是从1开始的。

在这里插入图片描述

ucase(string)转换成大写

在这里插入图片描述

lcase(string)转换成小写

在这里插入图片描述

left(string,length) 从string中的左边起取length个字符

在这里插入图片描述

right(string,length) 从string中的右边起取length个字符

在这里插入图片描述

length(string) string的长度

求学生表中学生姓名占用的字节数

select length(name) from exam_result;

在这里插入图片描述

以前说过mysql的字符真的就是一个字符,utf8中一个汉字占3个字节。

length函数返回字符串长度,以字节为单位。如果是多字节字符则计算多个字节数;如果是单字节字符则算作一个字节。比如:字母,数字算作一个字节,中文表示多个字节数(与字符集编码有关)

replace(str,search_str,replace_str) 在str中用replace_str替换search_str

将EMP表中所有名字中有S的替换成’上海’

在怎么换实际只是字符串级别的更换,并不会更改数据库中原始数据

在这里插入图片描述

substring(str,position [,length]) 从str的position开始,取length个字符

从特定位置开始截取length长字符串,如果没有指明length就默认截取到结尾

在这里插入图片描述

截取EMP表中ename字段的第二个到第三个字符

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

在这里插入图片描述

以首字母小写的方式显示所有员工的姓名
首先将名字首字母和剩下的区分开,然后将首字母变成小写,然后在拼接

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

在这里插入图片描述

ltrim(string) rtrim(string) trim(string)去除前空格或者后空格

在这里插入图片描述

3.数学函数

函数名称

描述

abs(number)

绝对值函数

bin(decimal_number)

十进制转换二进制

hex(decimalNumber)

转换成十六进制

conv(number,from_base,to_base)

进制转换

ceiling(number)

向上去整

floor(number)

向下去整

format(number,decimal_places)

格式化,保留小数位数

rand()

返回随机浮点数,返回[0.0,1.0)

mod(number,denominator)

取模,求余

abs(number) 绝对值函数

在这里插入图片描述

bin(decimal_number) 十进制转换二进制

在这里插入图片描述

hex(decimalNumber) 转换成十六进制

在这里插入图片描述

conv(number,from_base,to_base) 进制转换

在这里插入图片描述

format(number,decimal_places) 格式化,保留小数位数

在这里插入图片描述

rand()|返回随机浮点数,返回[0.0,1.0)

在这里插入图片描述

mod(number,denominator) 取模,求余

在这里插入图片描述

ceiling(number) 向上去整
floor(number) 向下去整

一般我进行取整的时候是进行四舍五入取整,但是除了四舍五入还有其他的取整方式。
我们把丢弃小数部分的取整方式称为0向取整,以前我们在C学的9/2=4 就是0向取整、还有向大的方向取的向上取整、向小的方向取的向下取整

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

4.其他函数

user() 查询当前用户

select user();

在这里插入图片描述

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

select database();

在这里插入图片描述

md5(str)对一个字符串进行md5摘要,摘要后得到一个32位字符串
比如密码在数据库绝对不能是明文保存的。万一表结构泄漏了,用户信息就全部被泄漏了。

这里有一个细节mysql对于sql里面涉及核心密码password关键字之类的这个sql语句就不会被保存,不能上翻下翻了

在这里插入图片描述

密码被变成固定32位字符串,就不用担心密码被泄漏了。但是登录的时候也必须是数据库的摘要密码。

在这里插入图片描述

除了md5进行保存密码之外,数据库还提供更复杂的密码设定的函数。
password()函数,MySQL数据库使用该函数对用户加密
在数据库设密码通常用的更多的是password()

在这里插入图片描述

ifnull(val1, val2) 如果val1为null,返回val2,否则返回val1的值
类似于三目操作符 : 为真返回第一个,为假返回第二个

在这里插入图片描述

### MYSQL 函数概述 在 MySQL 数据库管理系统中,函数是一类重要的工具,可以用来执行各种计算、转换和其他操作。这些函数分为内置函数和自定义函数两大类。以下是常见的 MySQL 内置函数分类及其具体用法。 --- #### **1. 字符串函数** 字符串函数主要用于处理字符型数据,支持拼接、截取、替换等功能。 - **`CONCAT(str1, str2, ...)`**: 将多个字符串连接成一个字符串。 ```sql SELECT CONCAT('Hello', ' ', 'World'); -- 返回 "Hello World" ``` - **`SUBSTRING(str, pos, len)`**: 提取子字符串,从 `pos` 开始提取长度为 `len` 的部分。 ```sql SELECT SUBSTRING('MySQL Function', 7, 8); -- 返回 "Function" ``` - **`REPLACE(str, from_str, to_str)`**: 替换字符串中的部分内容。 ```sql SELECT REPLACE('Database Management System', 'Management', 'Admin'); -- 返回 "Database Admin System" ``` - **`UPPER(str)` 和 `LOWER(str)`**: 转换字符串大小写。 ```sql SELECT UPPER('mysql'), LOWER('MYSQL'); -- 返回 "MYSQL", "mysql" ``` 以上内容来源于常见字符串函数介绍[^2]。 --- #### **2. 日期时间函数** 日期时间函数用于处理与时间和日期相关的数据。 - **`NOW()`**: 获取当前的日期和时间。 ```sql SELECT NOW(); -- 返回类似于 "2023-10-05 14:30:00" ``` - **`DATE(date_time_expr)`**: 提取日期部分。 ```sql SELECT DATE('2023-10-05 14:30:00'); -- 返回 "2023-10-05" ``` - **`DATE_FORMAT(date, format)`**: 根据指定格式化模板返回日期/时间字符串。 ```sql SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s'); -- 自定义格式输出 ``` 相关内容可参见日期函数说明[^2]。 --- #### **3. 数学函数** 数学函数提供了基本的数值运算能力。 - **`ABS(num)`**: 计算绝对值。 ```sql SELECT ABS(-10); -- 返回 10 ``` - **`ROUND(num, decimals)`**: 对数字四舍五入到指定位数的小数。 ```sql SELECT ROUND(123.456, 2); -- 返回 123.46
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值