MySQL内置函数

2023-10-16 11:17:11 浏览数 (1)

一.日期函数

1. 日期函数的介绍及使用

  • current_date()

获得年月日:

  • current_time()

获得时分秒:

将前二者结合:

  • current_timestamp()

获得时间戳:

相同作用的函数还有now():

  • date函数

date(datetime),datetime可以是各种日期,也可以是上述的各类函数,最终得到的是所述内容中的日期部分。

常量

各类函数:

  • date_add(date, interval d_value_type)

在日期的基础上加日期:

interval后面的数值单位可以是:year、month、day。

date也可以是函数的返回值

  • date_add(date, interval d_value_type)

在日期的基础上减日期:

interval后面的数值单位可以是:year、month、day。

date也可以是函数的返回值

  • datediff(date1, date2)

l两个日期的差,即date1-date2,单位是天。

当然,date一样可以是函数的返回值

2. 日期函数样例

案例-1:

  • 创建一张表,记录生日
代码语言:javascript复制
create table tmp(
id int primary key auto_increment,
birthday date
);
  • 插入数据
代码语言:javascript复制
insert into tmp(birthday) values(current_date());
insert into tmp(birthday) values(date(current_timestamp()));

案例-2:

  • 创建一个留言表
代码语言:javascript复制
create table msg (
id int primary key auto_increment,
content varchar(30) not null,
sendtime datetime
);
  • 插入数据
代码语言:javascript复制
insert into msg(content,sendtime) values('像风一样', now());
insert into msg(content,sendtime) values('致未来的我', now());
  • 显示所有留言信息,发布日期只显示日期,不用显示时间
  • 请查询在2分钟内发布的帖子

有两种方式去查询,即通过date_add()比较,或者通过date_sub比较。但都是一个道理。

代码语言:javascript复制
select * from msg where date_add(sendtime, interval 2 minute) > now();

或者:

代码语言:javascript复制
select * from msg where date_sub(now(), interval 2 minute) < sendtime;

二.字符串函数

1. 字符串函数的介绍

  • charset(str)

获取emp表的ename列的字符集

  • concat(string2, […])

连接字符串

  • instr(string,substring)

判断substring是否出现在string中,若找到,则返回匹配的起始位置。找不到则返回0

  • ucase(string)

小写转大写

  • lcase(string)

大写转小写

  • left(string2, length)

从string2的左边起提取length个字符

也有right,即从string2的右边起提取length个字符,就不一一演示了。

  • length(string)

求字符串长度

  • strcmp(string1, string2)

比较string1与string2大小

  • 去除空格

ltrim(string) :去除左空格

rtrim(string): 去除右空格

trim(string):去除字符串的左右空格。

其余的函数就通过下面的具体样例演示:

2. 字符串函数样例

  • 获取emp表的ename列的字符集
  • 要求显示exam_result表中的信息,显示格式:“XXX的语文是XXX分,数学XXX分,英语XXX分”
  • 求学生表中学生姓名占用的字节数

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

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

这种改变是在select时的改变,其并不会改变数据库的数据,仅仅是显示时的替换。

  • 截取EMP表中name字段的第二个到第三个字符
  • 以首字母小写的方式显示所有员工的姓名

先显示

再拼接

三.数学函数

  • 绝对值
代码语言:javascript复制
select abs(-100.2);
  • 十进制转换二进制
代码语言:javascript复制
select bin(100);
  • 十进制转换十六进制
代码语言:javascript复制
select hex(100);
  • 任意进制之间转换

例如:将100从10进制转换成2进制

代码语言:javascript复制
select conv(100, 10, 2);
  • 向上取整
代码语言:javascript复制
select ceiling(100.5);
  • 向下取整
代码语言:javascript复制
select floor(23.7);
  • 格式化,保留小数位数

比如将3.1415926保留两位小数:

代码语言:javascript复制
select format(3.1415926, 2);
  • 产生随机数
代码语言:javascript复制
select rand();
  • 取模,求余
代码语言:javascript复制
select mod(10, 3);

ps:关于负数取模,这里不演示。

以上的函数都可以嵌套,即任意一个函数的返回值可以充当另一个函数的参数,如果这个函数存在参数,并且类型满足的话。

四.其他函数

  • user() 查询当前用户
代码语言:javascript复制
select user();
  • md5(str)对一个字符串进行md5摘要,摘要后得到一个32位字符串
代码语言:javascript复制
select md5('admin');

产生的子串是等长的,这也就意味着,在select按照密码匹配的时候,就需要根据md5(‘密码’)映射出对应的32位字符,才可以匹配成功。

  • database()显示当前正在使用的数据库
代码语言:javascript复制
select database();
  • password()函数,MySQL数据库使用该函数对用户加密
代码语言:javascript复制
select password('123');

相比md5,此函数更普遍受用。

  • ifnull(val1, val2) 如果val1为null,返回val2,否则返回val1的值

扩展:

若数据库执行语句字段包含password字段,则我们在上翻下翻时就查不到历史对应的语句。

0 人点赞