前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【MySql】内置函数

【MySql】内置函数

作者头像
平凡的人1
发布2023-10-15 12:29:57
1890
发布2023-10-15 12:29:57
举报

日期函数

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

image-20230615225200447
image-20230615225200447

日期:年月日

时间:时 分 秒

代码语言:javascript
复制
-- 获得年月日:
select current_date();

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

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

在日期的基础上加日期:

代码语言:javascript
复制
select date_add('2017-10-28', interval 10 day);
image-20230615225923173
image-20230615225923173

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

代码语言:javascript
复制
select date_sub('2017-10-1', interval 2 day);
image-20230615230026972
image-20230615230026972

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

代码语言:javascript
复制
select datediff('2023-10-10','2023-6-15');
image-20230615230140560
image-20230615230140560
  • 案例

创建一张表,记录生日:

代码语言:javascript
复制
mysql> create table tmp(
    -> id bigint primary key auto_increment,
    -> birthday date not null
    -> );
Query OK, 0 rows affected (0.03 sec)
image-20230615230523800
image-20230615230523800

插入日期:

代码语言:javascript
复制
insert into tmp (birthday) values ('1999-01-01');
image-20230615230628481
image-20230615230628481

创建一个留言表:

代码语言:javascript
复制
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)

插入数据:

代码语言:javascript
复制
insert into msg (content,sendtime) values ('好好学习,天天向上',now());
image-20230615231410596
image-20230615231410596

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

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

image-20230615232349805
image-20230615232349805
代码语言:javascript
复制
select content,sendtime from msg where sendtime > date_sub(now(),interval 2 minute);
image-20230615232521852
image-20230615232521852

字符串函数

image-20230615232919325
image-20230615232919325

直接举例子:

  • 获取emp表的sal列的字符集
代码语言:javascript
复制
select charset(sal) from emp;
image-20230615234642789
image-20230615234642789
  • 要求显示exam_result表中的信息,显示格式:“XXX的语文是XXX分,数学XXX分,英语XXX分”
代码语言:javascript
复制
select concat('考生姓名: ',name,'总分: ',chinese+math+english,',语文成绩: ',chinese,',',math'数学成绩: ,',math,',英语成绩: ',english) msg from exam_result;
image-20230616130357658
image-20230616130357658
  • 求学生表中学生姓名占用的字节数
代码语言:javascript
复制
select name,length(name) from exam_result;
image-20230616130640170
image-20230616130640170

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

  • 将EMP表中所有名字中有S的替换成’上海’
代码语言:javascript
复制
select ename,replace(ename,'S','上海') from emp;
image-20230616141620756
image-20230616141620756
  • 截取EMP表中ename字段的第二个到第三个字符
代码语言:javascript
复制
select substring(ename,2,2), ename from emp;
image-20230616142205751
image-20230616142205751
  • 以首字母小写的方式显示所有员工的姓名
代码语言:javascript
复制
select ename,concat(lcase(substring(ename,1,1)),substring(ename,2)) from emp;
image-20230616142541879
image-20230616142541879

数学函数

image-20230616142608637
image-20230616142608637
  • 绝对值
代码语言:javascript
复制
select abs(-100.2);
  • 十进制转换成二进制
代码语言:javascript
复制
select bin(10);
  • 向上取整
代码语言:javascript
复制
select ceiling(23.11);
-- 24 
  • 向下取整
代码语言:javascript
复制
select floor(23.99);

-- 23
  • 保留2位小数位数(小数四舍五入)
代码语言:javascript
复制
select format(12.3456,2);

-- 12.35
  • 产生随机数
代码语言:javascript
复制
select rand();
  • 取模
代码语言:javascript
复制
select mod(10,3);

-- 1

其他函数

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

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

代码语言:javascript
复制
insert into user (name,password) values ('李四',md5('helloworld'));
image-20230616145720857
image-20230616145720857
  • database()显示当前正在使用的数据库
代码语言:javascript
复制
select database();
image-20230616145236050
image-20230616145236050
  • password()函数,MySQL数据库使用该函数对用户加密
代码语言:javascript
复制
select password('12233344455');
image-20230616145955079
image-20230616145955079
  • ifnull(val1, val2) 如果val1为null,返回val2,否则返回val1的值
代码语言:javascript
复制
select ifnull(null,10) result;
image-20230616150138566
image-20230616150138566

OJ题目

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

描述

现有strings表如下:

id指序列号;

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

image-20230616150332929
image-20230616150332929

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

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

image-20230616150349796
image-20230616150349796

示例1

输入:

代码语言:javascript
复制
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');

输出:

代码语言:javascript
复制
1|2
2|3
3|5

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

代码语言:javascript
复制
select id,length(string)- length(replace(string,",","")) from strings;
本文参与?腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-10-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客?前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 日期函数
  • 字符串函数
  • 数学函数
  • 其他函数
  • OJ题目
相关产品与服务
云数据库 MySQL
腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com