【MySql】内置函数

文章目录

  • 日期函数
  • 字符串函数
  • 数学函数
  • 其他函数
  • OJ题目

日期函数

废话不多说,我们直接来看相关日期函数:

【MySql】内置函数_第1张图片

日期:年月日

时间:时 分 秒

-- 获得年月日:
select current_date();

-- 获得时分秒:
select current_time();

--获得时间戳:
select current_timestamp();

【MySql】内置函数_第2张图片

在日期的基础上加日期:

select date_add('2017-10-28', interval 10 day);

【MySql】内置函数_第3张图片

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

select date_sub('2017-10-1', interval 2 day);

【MySql】内置函数_第4张图片

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

select datediff('2023-10-10','2023-6-15');

【MySql】内置函数_第5张图片

  • 案例

创建一张表,记录生日:

mysql> create table tmp(
    -> id bigint primary key auto_increment,
    -> birthday date not null
    -> );
Query OK, 0 rows affected (0.03 sec)

【MySql】内置函数_第6张图片

插入日期:

insert into tmp (birthday) values ('1999-01-01');

【MySql】内置函数_第7张图片

创建一个留言表:

mysql> create table msg(
    -> id bigint primary key auto_increment,
    -> content varchar(100) not null,
    -> sendtime datetime
    -> );
Query OK, 0 rows affected (0.06 sec)![image-20230615231123122](https://bloggggg.oss-cn-guangzhou.aliyuncs.com/img/202306152311154.png)

【MySql】内置函数_第8张图片

插入数据:

insert into msg (content,sendtime) values ('好好学习,天天向上',now());

【MySql】内置函数_第9张图片

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

如何确认表中的数据是2min以内的:

【MySql】内置函数_第10张图片

select content,sendtime from msg where sendtime > date_sub(now(),interval 2 minute);

【MySql】内置函数_第11张图片

字符串函数

【MySql】内置函数_第12张图片

直接举例子:

  • 获取emp表的sal列的字符集
select charset(sal) from emp;

【MySql】内置函数_第13张图片

  • 要求显示exam_result表中的信息,显示格式:“XXX的语文是XXX分,数学XXX分,英语XXX分”
select concat('考生姓名: ',name,'总分: ',chinese+math+english,',语文成绩: ',chinese,',',math'数学成绩: ,',math,',英语成绩: ',english) msg from exam_result;

【MySql】内置函数_第14张图片

  • 求学生表中学生姓名占用的字节数
select name,length(name) from exam_result;

【MySql】内置函数_第15张图片

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

  • 将EMP表中所有名字中有S的替换成’上海’
select ename,replace(ename,'S','上海') from emp;

【MySql】内置函数_第16张图片

  • 截取EMP表中ename字段的第二个到第三个字符
select substring(ename,2,2), ename from emp;

【MySql】内置函数_第17张图片

  • 以首字母小写的方式显示所有员工的姓名
select ename,concat(lcase(substring(ename,1,1)),substring(ename,2)) from emp;

【MySql】内置函数_第18张图片

数学函数

【MySql】内置函数_第19张图片

  • 绝对值
select abs(-100.2);
  • 十进制转换成二进制
select bin(10);
  • 向上取整
select ceiling(23.11);
-- 24 
  • 向下取整
select floor(23.99);

-- 23
  • 保留2位小数位数(小数四舍五入)
select format(12.3456,2);

-- 12.35
  • 产生随机数
select rand();
  • 取模
select mod(10,3);

-- 1

其他函数

  • user() 查询当前用户
select user();

【MySql】内置函数_第20张图片

  • md5(str)对一个字符串进行md5摘要,摘要后得到一个32位字符串

比如我们对一个表插入数据时,涉及到密码,可以用到md5:

insert into user (name,password) values ('李四',md5('helloworld'));

【MySql】内置函数_第21张图片

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

【MySql】内置函数_第22张图片

  • password()函数,MySQL数据库使用该函数对用户加密
select password('12233344455');

【MySql】内置函数_第23张图片

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

【MySql】内置函数_第24张图片

OJ题目

SQL245 查找字符串中逗号出现的次数

描述

现有strings表如下:

id指序列号;

string列中存放的是字符串,且字符串中仅包含数字、字母和逗号类型的字符。

image-20230616150332929

请你统计每个字符串中逗号出现的次数cnt。

以上例子的输出结果如下:

【MySql】内置函数_第25张图片

示例1

输入:

drop table if exists strings;
CREATE TABLE strings(
id int(5)  NOT NULL PRIMARY KEY,
string  varchar(45) NOT NULL
);
insert into strings values
(1, '10,A,B'),
(2, 'A,B,C,D'),
(3, 'A,11,B,C,D,E');

输出:

1|2
2|3
3|5

先把逗号替换成空格,然后总的个数减去替换之后的个数自然就是逗号的个数了:

select id,length(string)- length(replace(string,",","")) from strings;

你可能感兴趣的:(MySql,mysql,数学建模,数据库)