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

【MYSQL】内置函数

作者头像
青衫哥
发布2023-12-06 15:12:37
1710
发布2023-12-06 15:12:37
举报
文章被收录于专栏:C++打怪之路C++打怪之路

目录

前言

一、日期函数

案例:创建一个留言表

二、字符串函数

三、数学函数​编辑

四、其它函数


前言

本篇博客介绍MYSQL中内置的函数,例如:时间函数、字符串函数、数学函数…… 希望各位看完能有所收获。


一、日期函数

  • 获取年月日:

mysql> select current_date(); +----------------+ | current_date() | +----------------+ | 2023-11-30 | +----------------+ 1 row in set (0.01 sec)

  • 获取时分秒:

mysql> select current_time(); +----------------+ | current_time() | +----------------+ | 21:51:44 | +----------------+ 1 row in set (0.00 sec)

  • 获取时间戳

mysql> select current_timestamp(); +---------------------+ | current_timestamp() | +---------------------+ | 2023-11-30 21:52:14 | +---------------------+ 1 row in set (0.00 sec)

  • 在日期的基础上加上一段时间:

mysql> select date_add('2023-11-30',interval 10 day); +----------------------------------------+ | date_add('2023-11-30',interval 10 day) | +----------------------------------------+ | 2023-12-10 | +----------------------------------------+ 1 row in set (0.00 sec)

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

mysql> select date_sub('2023-11-30',interval 10 day); +----------------------------------------+ | date_sub('2023-11-30',interval 10 day) | +----------------------------------------+ | 2023-11-20 | +----------------------------------------+ 1 row in set (0.00 sec)

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

mysql> select datediff('2023-11-30','2023-2-3'); +-----------------------------------+ | datediff('2023-11-30','2023-2-3') | +-----------------------------------+ | 300 | +-----------------------------------+ 1 row in set (0.01 sec)

案例:创建一个留言表

//创建表 mysql> create table msg( -> id int primary key auto_increment, -> content varchar(30) not null, -> sendtime datetime -> ); Query OK, 0 rows affected (0.02 sec) //插入数据 mysql> insert into msg(content,sendtime) values('大鹏一日同风起,扶摇直上九万里',now()); Query OK, 1 row affected (0.01 sec) mysql> insert into msg(content,sendtime) values('仰天大笑出门去','2023-11-30 12:00:00'); Query OK, 1 row affected (0.00 sec) //查看最近二十分钟内的留言 //要求: //发送时间 + 20分钟 > 现在时间 //现在时间 - 发送时间 < 20分钟 mysql> select * from msg where date_add(sendtime,interval 20 minute) > now(); +----+-----------------------------------------------+---------------------+ | id | content | sendtime | +----+-----------------------------------------------+---------------------+ | 1 | 大鹏一日同风起,扶摇直上九万里 | 2023-11-30 23:25:58 | +----+-----------------------------------------------+---------------------+ 1 row in set (0.00 sec)


二、字符串函数

  • 获取emp表的ename列的字符集

mysql> select charset(content) from msg; +------------------+ | charset(content) | +------------------+ | utf8 | | utf8 | +------------------+ 2 rows in set (0.00 sec)

  • 要求显示数据并且拼接在一起

mysql> select concat(id,'号的留言是:',content,'---',sendtime) from msg; +--------------------------------------------------------------------------------------+ | concat(id,'号的留言是:',content,'---',sendtime) | +--------------------------------------------------------------------------------------+ | 1号的留言是:大鹏一日同风起,扶摇直上九万里---2023-11-30 23:25:58 | | 3号的留言是:仰天大笑出门去---2023-11-30 12:00:00 | +--------------------------------------------------------------------------------------+ 2 rows in set (0.00 sec)

  • 求留言表中留言占用的字节数

mysql> select id,length(content) from msg; +----+-----------------+ | id | length(content) | +----+-----------------+ | 1 | 45 | | 3 | 21 | +----+-----------------+ 2 rows in set (0.00 sec) 注意:length函数返回字符串长度,以字节为单位。如果是多字节字符则计算多个字节数; 如果是单字节字符则算作一个字节。比如:字母,数字算作一个字节,中文表示多个字节数(与字符集编码有关)

  • 将表中的'孙'替换成'张'

//孙权就变成了王权 //但是我们得到的是一张临时表结构 mysql> select replace(name,'孙','王'),english,chinese,math from exam_result; +---------------------------+---------+---------+------+ | replace(name,'孙','王') | english | chinese | math | +---------------------------+---------+---------+------+ | 唐三藏 | 56 | 67 | 98 | | 猪悟能 | 90 | 88 | 98 | | 曹孟德 | 67 | 70 | 60 | | 刘玄德 | 45 | 55 | 85 | | 王权 | 78 | 70 | 73 | | 宋公明 | 30 | 75 | 65 | | 马超 | 65 | 65 | 65 | +---------------------------+---------+---------+------+ 7 rows in set (0.00 sec) //我们再查看表数据的时候我们会发现表中的数据还是孙权 //表中的数据并不会被修改 mysql> select * from exam_result; +----+-----------+---------+------+---------+ | id | name | chinese | math | english | +----+-----------+---------+------+---------+ | 1 | 唐三藏 | 67 | 98 | 56 | | 3 | 猪悟能 | 88 | 98 | 90 | | 4 | 曹孟德 | 70 | 60 | 67 | | 5 | 刘玄德 | 55 | 85 | 45 | | 6 | 孙权 | 70 | 73 | 78 | | 7 | 宋公明 | 75 | 65 | 30 | | 8 | 马超 | 65 | 65 | 65 | +----+-----------+---------+------+---------+ 7 rows in set (0.00 sec)

  • 将小写字母显示为大写字母

mysql> select ucase('abcdefg'); +------------------+ | ucase('abcdefg') | +------------------+ | ABCDEFG | +------------------+ 1 row in set (0.00 sec)


三、数学函数

这里函数都很通俗移动,在这里只讲解一下四种取整规则:

  • 向零取整

在取整数的时候直接舍弃小数部分的,叫做向零取整,因为数的变化都是向0靠近。

  • 向上取整

在取整的时候,自动向上进一位。

  • 向下取整
  • 四舍五入

四、其它函数

函数名称

描述

user()

查询当前用户

md5(str)

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

database()

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

password()

MySQL数据库使用该函数对用户加密

ifnull(val1, val2)

如果val1为null,返回val2,否则返回val1的值

案例1:

//查询当前用户 mysql> select user(); +--------+ | user() | +--------+ | root@ | +--------+ 1 row in set (0.00 sec)

案例2:

//我们在储存密码的时候,肯定不可能就直接把密码存进去 //而是先通过加密之后再存 //加密就要用到函数md5 //先创建一张用户表 mysql> create table user( -> name varchar(10) not null, -> password varchar(20) not null -> ); Query OK, 0 rows affected (0.02 sec) //插入用户名和加密后的密码 mysql> insert into user values('青衫哥',md5('12345')); Query OK, 1 row affected (0.01 sec) mysql> insert into user values('张三',md5('1')); Query OK, 1 row affected (0.00 sec) mysql> select * from user; +-----------+----------------------------------+ | name | password | +-----------+----------------------------------+ | 青衫哥 | 827ccb0eea8a706c4c34a16891f84e7b | | 张三 | c4ca4238a0b923820dcc509a6f75849b | +-----------+----------------------------------+ 2 rows in set (0.00 sec) //可以看出,不管输入长度怎么样,加密之后的长度都是一样的。

那么我们到时候怎么确定输入的密码是否正确呢?

mysql> select * from user where name ='张三' and password =md5('1'); +--------+----------------------------------+ | name | password | +--------+----------------------------------+ | 张三 | c4ca4238a0b923820dcc509a6f75849b | +--------+----------------------------------+ 1 row in set (0.00 sec

案例3:

//查看当前使用的数据库 mysql> select database(); +------------+ | database() | +------------+ | yz_test | +------------+ 1 row in set (0.00 sec)

案例4:

//MYSQL中还给我们提供了一个输入密码的函数 //这个在使用中是最常见的 mysql> select password('1234'); +-------------------------------------------+ | password('1234') | +-------------------------------------------+ | *A4B6157319038724E3560894F7F932C8886EBFCF | +-------------------------------------------+ 1 row in set, 1 warning (0.00 sec)

案例5:

//ifnull函数的使用 //这个比较像C++中的三目运算符 mysql> select ifnull('abc','123'); +---------------------+ | ifnull('abc','123') | +---------------------+ | abc | +---------------------+ 1 row in set (0.00 sec) mysql> select ifnull(null,'123'); +--------------------+ | ifnull(null,'123') | +--------------------+ | 123 | +--------------------+ 1 row in set (0.00 sec)

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-12-05,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

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