MySQL内置函数

文章目录

  • MySQL内置函数
    • 1. 日期函数
      • 1.1 用法演示
        • (1) 获得年月日 - current_date()
        • (2) 获得时分秒 - current_time()
        • (3) 获得时间戳 - current_timestamp()
        • (4) 获得当前时间- now()
        • (5) 获取datetime参数的日期部分 - date(datetime)
        • (6) 在日期的基础上加时间 - date_add(date, interval d_value_type)
        • (7) 在日期的基础上减去时间 - date_sub(date, interval d_value_type)
        • (8) 计算两个日期之间相差多少天 - datediff(date1, date2)
      • 1.2 案例讲解
        • (1) 案例1:生日表
        • (2) 案例2:留言表
    • 2. 字符串函数
      • 2.1 用法演示
        • (1) instr(str, substr)
        • (2) ltrim(str)、rtrim(str)、trim(str)
      • 2.2 案例讲解
        • (1) 获取emp表的ename列的字符集
        • (2) 要求显示exam_result表中的信息,显示格式:“XXX的语文是XXX分,数学XXX分,英语XXX分”
        • (3) 求学生表中学生姓名占用的字节数
        • (4) 将EMP表中所有名字中有S的替换成'上海'
        • (5) 截取EMP表中ename字段的第二个到第三个字符
        • (6) 以首字母小写的方式显示所有员工的姓名
    • 3. 数学函数
      • 3.1 用法演示
        • (1) 绝对值 - abs(number)
        • (2) 十进制转换成二进制 - bin(decimal_number)
        • (3) 十进制转换成十六进制 - hex(decimal_number)
        • (4) 任意进制转换 - conv(number, from_base, to_base)
        • (5) 格式化数字, 保留decimal_places位小数 - format(number, decimal_places)
        • (6) 求余 - mod(number, denominator)
        • (7) 生成随机浮点数 - rand()
        • (8) 上下取整 - ceiling(number),floor(number)
    • 4. 其它函数
      • (1) user() 查询当前用户
      • (2) database()显示当前正在使用的数据库
      • (3)md5(str)对一个字符串进行md5摘要
      • (4) password()函数,MySQL数据库使用该函数对用户加密
      • (5) ifnull(val1, val2) 如果val1为null,返回val2,否则返回val1的值

MySQL内置函数

1. 日期函数

函数名称描述
current_date()获取当前日期
current_time()获取当前时间
current_timestamp()获取当前时间戳
now()获取当前日期时间
date(datetime)获取datetime参数的日期部分
date_add(date, interval d_value_type)在date中添加日期或时间,interval后的数值单位可以是:year、month、day、hour、minute、second
date_sub(date, interval d_value_type)在date中减去日期或时间,interval后的数值单位可以是:year、month、day、hour、minute、second
datediff(date1, date2)获取两个日期的差,单位是天

1.1 用法演示

(1) 获得年月日 - current_date()

mysql> select current_date();

在这里插入图片描述

(2) 获得时分秒 - current_time()

mysql> select current_time();

在这里插入图片描述

(3) 获得时间戳 - current_timestamp()

mysql> select current_timestamp();

连续几次获取时间戳,发现时间戳一直在变化

在这里插入图片描述

(4) 获得当前时间- now()

mysql> select now();

可以看出当前时间也是像时间戳一样不断变化的

在这里插入图片描述

(5) 获取datetime参数的日期部分 - date(datetime)

mysql> select date('1949-10-01 00:00:00');

在这里插入图片描述

也可以像函数一样嵌套使用

mysql> select date(now());

在这里插入图片描述

(6) 在日期的基础上加时间 - date_add(date, interval d_value_type)

mysql> select date_add('2050-01-01', interval 40 day);
mysql> select date_add(now(), interval 10 minute);

在这里插入图片描述

(7) 在日期的基础上减去时间 - date_sub(date, interval d_value_type)

mysql> select date_sub('2050-01-01', interval 10 day);
mysql> select date_sub(now(), interval 10 minute);

在这里插入图片描述

(8) 计算两个日期之间相差多少天 - datediff(date1, date2)

mysql> select datediff('2017-10-10', '2016-09-01');
mysql> select datediff('2010-10-10', '2016-09-01');
mysql> select datediff(date(now()), '1949-10-01');

注意:这里的相差天数是:date1 - date2,如果date1 < date2则两数相减会出现负值

在这里插入图片描述

1.2 案例讲解

(1) 案例1:生日表

创建一张表,用于记录生日

mysql> create table tmp(-> id bigint primary key auto_increment,-> birthday date not null-> );

在这里插入图片描述

插入数据:

在这里插入图片描述

插入当前日期:

mysql> insert into tmp (birthday) values (current_date());

在这里插入图片描述

可以通过函数插入,插入时间,mysql也会得到日期;同时也能插入时间戳,表会拿走日期部分(两种写法不建议)

在这里插入图片描述

想要这样插入,最好用date函数,获取时间的日期部分再插入

mysql> insert into tmp (birthday) values (date(current_timestamp()));

在这里插入图片描述

(2) 案例2:留言表

创建一个留言表

mysql> create table msg (-> id bigint primary key auto_increment,-> content varchar(100) not null,-> sendtime datetime-> );

在这里插入图片描述

插入一些数据后:

在这里插入图片描述

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

mysql> select content, date(sendtime) from msg;

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

2. 字符串函数

函数名称描述
charset(str)获取字符串使用的字符集
concat(str1, str2 [, …])获取连接后的字符串
instr(str, substr)获取substr在str中首次出现的位置,没有出现返回0
ucase(str)获取转换成大写后的字符串
lcase(str)获取转换成小写后的字符串
left(str, length)从字符串的左边开始,向后截取length个字符
length(str)获取字符串占用的字节数
replace(str, search_str, replace_str)将字符串中的search_str替换成replace_str
strcmp(str1, str2)逐字符比较两个字符串的大小
substring(str, position [, length])从字符串的position开始,向后截取length个字符
ltrim(str)、rtrim(str)、trim(str)去除字符串的前空格、后空格、前后空格

2.1 用法演示

函数用法很简单,我只演示instr和ltrim、rtrim、trim,剩下的在案例部分

(1) instr(str, substr)

mysql> select instr('abcd1234efg', '1234');
mysql> select instr('abcd1234efg', '1234a');

在这里插入图片描述

(2) ltrim(str)、rtrim(str)、trim(str)

这3个函数都不会去掉字符与字符之间的空格

在这里插入图片描述

  • ltrim(str) — 去除字符串的前空格
mysql> select ltrim('    你好   ') as res;

在这里插入图片描述

  • rtrim(str) — 去除字符串的后空格
mysql> select rtrim('    你好   ') as res;

在这里插入图片描述

  • trim(str) — 去除字符串的前后空格
mysql> select trim('    你好   ') as res;

在这里插入图片描述

2.2 案例讲解

(1) 获取emp表的ename列的字符集

用的是之前oracle 9i的经典测试表

在这里插入图片描述

mysql> select charset(ename) from emp;

charset函数在实际中的用途:处理表中关于乱码信息确认的问题

在这里插入图片描述

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

用的是之前的exam_result

在这里插入图片描述

mysql> select concat('考生姓名: ', name,', 总分: ',  chinese+math+english, ', 语文成绩: ',       -> chinese, ', 数学成绩: ',  math, ', 英语成绩: ',  english) asmsg from exam_result;

在这里插入图片描述

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

mysql> select name,length(name) from exam_result;

在这里插入图片描述

注:在mysql里面,一个UTF-8中文字符占用3字节,gbk中一个字符占用2个字节

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

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

mysql> select ename, replace(ename, 'S', '上海') from emp;

在这里插入图片描述

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

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

在这里插入图片描述

(6) 以首字母小写的方式显示所有员工的姓名

  • substring截取员工姓名首字母后使用lcase将其转换成小写
  • substring截取员工姓名第二个字符及其后续字符
  • 使用contact连接上面两处
mysql> select ename, concat(lcase(substring(ename, 1, 1)), substring(ename, 2)) from emp;

在这里插入图片描述

3. 数学函数

函数名称描述
abs(number)绝对值函数
bin(decimal_number)十进制转换成二进制
hex(decimal_number)十进制转换成十六进制
conv(number, from_base, to_base)conv(number, from_base, to_base)
ceiling(number)向上取整
floor(number)向下取整
format(number, decimal_places)格式化,保留decimal_places位小数
rand()生成随机浮点数,范围 [0.0, 1.0)
mod(number, denominator)求余

3.1 用法演示

(1) 绝对值 - abs(number)

mysql> select abs(12);
mysql> select abs(-12);

在这里插入图片描述

(2) 十进制转换成二进制 - bin(decimal_number)

mysql> select bin(10);
mysql> select bin(3.14);
mysql> select bin(7.14);

观察小数的十进制转二进制并没有按照小数真正的二进制转换,而是只对整数部分转换

在这里插入图片描述

(3) 十进制转换成十六进制 - hex(decimal_number)

mysql> select hex(10);
mysql> select hex(16);

这里hex(16)转化出来并不是十,而是一零

在这里插入图片描述

(4) 任意进制转换 - conv(number, from_base, to_base)

mysql> select conv (10, 10, 4);
mysql> select conv (10, 10, 2);

在这里插入图片描述

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

mysql> select format(3.1415926, 3);
mysql> select format(3.1415926, 4);

在这里插入图片描述

(6) 求余 - mod(number, denominator)

mysql> select mod(10, 3);

在这里插入图片描述

(7) 生成随机浮点数 - rand()

mysql> select rand();
mysql> select rand()*100;

在这里插入图片描述

也可以与format函数配合使用

mysql> select format(rand()*100, 1);
mysql> select format(rand()*100, 0);   #可以得到一个随机整数

在这里插入图片描述

(8) 上下取整 - ceiling(number),floor(number)

总结:向上取整的数都大于等于原数,向下取整的数都小于等于原数

在这里插入图片描述

mysql> select ceiling(3.1);
mysql> select ceiling(3.01);
mysql> select ceiling(-3.1);
mysql> select ceiling(-3.9);

在这里插入图片描述

mysql> select floor(4.5);
mysql> select floor(4.9);
mysql> select floor(-4.1);
mysql> select floor(-4.9);

在这里插入图片描述

4. 其它函数

(1) user() 查询当前用户

mysql> select user();

在这里插入图片描述

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

mysql> select database();  

在这里插入图片描述

(3)md5(str)对一个字符串进行md5摘要

mysql> select md5('a');

在这里插入图片描述

注: 一般公司内部数据库不会存储用户的明文密码,而会将用户密码形成摘要后存储对应的摘要,当用户登录账号时,将用户输入的的密码形成摘要后与数据库中存储的摘要做对比,如果对比成功则允许登录

比如这样一张表,一个用户密码按照明文存储,另一个用户密码md5加密后存储

在这里插入图片描述

查找’李四’这个用户时,要这样查找

mysql> select name from user where name='李四' and password=md5('hello1234');

在这里插入图片描述

(4) password()函数,MySQL数据库使用该函数对用户加密

mysql> select password('asgfABC123@,');

在这里插入图片描述

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

mysql> select ifnull(null,10) as result;
mysql> select ifnull(20,10) as result;
mysql> select ifnull(20,null) as result;

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/114426.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JSX底层渲染机制

JSX底层渲染机制 一,.步骤 1.把我们写的jsx语法编译为虚拟DOM【virtualDOM】 虚拟DOM对象&#xff1a;框架自己内部构建的一套对象体系&#xff08;对象的相关成员都是React内部绑定的&#xff09;&#xff0c;基于这些属性描述出我们所构建视图中的DOM接的相关特征 1基于ba…

Linux学习之逻辑卷LVM用途和创建

理论基础 Linux文件系统建立在逻辑卷上&#xff0c;逻辑卷建立在物理卷上。 物理卷处于LVM中的最底层&#xff0c;可以将其理解为物理硬盘、硬盘分区或者RAID磁盘阵列&#xff0c;这都可以。卷组建立在物理卷之上&#xff0c;一个卷组可以包含多个物理卷&#xff0c;而且在卷组…

CSS中如何实现元素的渐变背景(Gradient Background)效果?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ CSS 渐变背景效果⭐ 线性渐变背景⭐ 径向渐变背景⭐ 添加到元素的样式⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅&…

安全基础 --- https详解(02)、cookie和session、同源和跨域

https详解&#xff08;02&#xff09;--- 数据包扩展 Request --- 请求数据包Response --- 返回数据包 若出现代理则如下图&#xff1a; Proxy --- 代理服务器 &#xff08;1&#xff09;http和https的区别 http明文传输&#xff0c;数据未加密&#xff1b;http页面响应速度…

FreeSWITCH 1.10.10 简单图形化界面3 - 阿里云NAT设置

FreeSWITCH 1.10.10 简单图形化界面3 - 阿里云NAT设置 0、 界面预览1、 查看IP地址2、 修改协议配置3、 开放阿里云安全组4、 设置ACL5、 设置协议中ACL&#xff0c;让PBX匹配内外网6、 重新加载SIP模块7、 查看状态8、 测试一下 0、 界面预览 http://myfs.f3322.net:8020/ 用…

2023年腾讯云优惠券(代金券)领取方法整理汇总

腾讯云优惠券是腾讯云为了吸引用户而推出的一种优惠凭证&#xff0c;领券之后新购、续费、升级腾讯云的相关产品可以享受优惠&#xff0c;从而节省一点的费用&#xff0c;下面给大家分享腾讯云优惠券领取的几种方法。 一、腾讯云官网领券页面领取 腾讯云官网经常推出各种优惠活…

软件测试/测试开发丨Selenium 高级定位 Xpath

点此获取更多相关资料 本文为霍格沃兹测试开发学社学员学习笔记分享 原文链接&#xff1a;https://ceshiren.com/t/topic/27036 一、xpath 基本概念 XPATH是一门在XML文档中查找信息的语言 XPATH使用路径表达式在XML文档中进行导航 XPATH的应用非常广泛&#xff0c;可以用于UI自…

Unity3D 连接 SQLite 作为数据库基础功能【详细图文教程】

一、简单介绍一下SQLite的优势&#xff08;来自ChatGPT&#xff09; 轻量级: SQLite是一个嵌入式数据库引擎&#xff0c;它的库文件非常小巧&#xff0c;没有独立的服务器进程&#xff0c;适用于嵌入到其他应用程序中&#xff0c;对于轻量级的项目或移动应用程序非常适用。零配…

基于java swing和mysql实现的电影票购票管理系统(源码+数据库+运行指导视频)

一、项目简介 本项目是一套基于java swing和mysql实现的电影票购票管理系统&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Java学习者。 包含&#xff1a;项目源码、项目文档、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都…

金融帝国实验室(Capitalism Lab)官方正版游戏『2023秋季特卖』

「金融帝国实验室」&#xff08;Capitalism Lab&#xff09;Enlight 官方正版游戏「2023秋季特卖」 ■时间&#xff1a;2023.09.01&#xff5e;2023.10.15 ■游戏开发商&#xff1a;Enlight Software Ltd. 请您认准以下官方正版游戏购买链接&#xff1a;支持“支付宝&a…

环境安装:rpm安装jdk上线项目

Tomcat安装 解析域名 购买域名并配置 安装Docker yum 卸载以前装过的docker

Orchestrator介绍三 命令行工具

Orchestrator-client orchestrator 支持两种方式通过命令行操作&#xff1a; 一种是 通过命令 orchestrator&#xff1a; 需要在服务器上安装 orchestrator&#xff0c;但是可以不作为服务启动。 需要配置orchestrator的文件&#xff0c;以便能够连接后端数据库 一种是通过…

Navicat使用HTTP通道服务器进行连接mysql数据库(超简单三分钟完成),centos安装nginx和php,docker安装nginx+php合并版

序言 因为数据库服务器在外网是不能直接连接访问的&#xff0c;但是可以访问网站&#xff0c;网站后台就能访问数据库&#xff0c;所以在此之前&#xff0c;访问数据库的数据是一件非常麻烦的事情&#xff0c;在平时和运维的交流中发现&#xff0c;他们会使用ssh通道进行连接访…

C++的基类和派生类构造函数

基类的成员函数可以被继承&#xff0c;可以通过派生类的对象访问&#xff0c;但这仅仅指的是普通的成员函数&#xff0c;类的构造函数不能被继承。构造函数不能被继承是有道理的&#xff0c;因为即使继承了&#xff0c;它的名字和派生类的名字也不一样&#xff0c;不能成为派生…

C#,数值计算——Midinf的计算方法与源程序

1 文本格式 using System; namespace Legalsoft.Truffer { public class Midinf : Midpnt { public new double func(double x) { return funk.funk(1.0 / x) / (x * x); } public Midinf(UniVarRealValueFun funcc, double aa,…

查询优化器内核剖析第一篇

SQL Server 的查询优化器是一个基于成本的优化器。它为一个给定的查询分析出很多的候 选的查询计划&#xff0c;并且估算每个候选计划的成本&#xff0c;从而选择一个成本最低的计划进行执行。实际上&#xff0c; 因为查询优化器不可能对每一个产生的候选计划进行优化&#xff…

IDEA集成Git相关操作知识(pull、push、clone)

一&#xff1a;集成git 1&#xff1a;初始化git&#xff08;新版本默认初始化&#xff09; 老版本若没有&#xff0c;点击VCS&#xff0c;选中import into Version Controller中的Create git Repository(创建git仓库)&#xff0c;同理即可出现git符号。 也可查看源文件夹有没有…

【力扣每日一题】2023.8.30 到家的最少跳跃次数

目录 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 代码&#xff1a; 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 题目给我们一只跳蚤&#xff0c;我们可以操控它前跳 a 格或是后跳 b 格&#xff0c;不能跳到小于0的位置&#xff0c;有一些被禁止的点不…

系统架构设计高级技能 · Web架构

现在的一切都是为将来的梦想编织翅膀&#xff0c;让梦想在现实中展翅高飞。 Now everything is for the future of dream weaving wings, let the dream fly in reality. 点击进入系列文章目录 系统架构设计高级技能 Web架构 一、Web架构介绍1.1 Web架构涉及技术1.2 单台服务…

【JAVA】什么是异常

⭐ 作者&#xff1a;小胡_不糊涂 &#x1f331; 作者主页&#xff1a;小胡_不糊涂的个人主页 &#x1f4c0; 收录专栏&#xff1a;浅谈Java &#x1f496; 持续更文&#xff0c;关注博主少走弯路&#xff0c;谢谢大家支持 &#x1f496; 异常 1. 什么是异常1.1 概念1.2 异常的体…