【MySQL】内置函数

文章目录

  • 一、日期函数
    • 1.1 日期函数的基本使用
    • 1.2 案例1
    • 1.3 案例2
  • 二、字符串函数
  • 三、数学函数
  • 四、其他函数

一、日期函数

在这里插入图片描述

1.1 日期函数的基本使用

  • 获取当前日期与日期
mysql> select current_date(), current_time();
+----------------+----------------+
| current_date() | current_time() |
+----------------+----------------+
| 2023-08-08     | 12:40:57       |
+----------------+----------------+
1 row in set (0.00 sec)
  • 获取时间戳
mysql> select current_timestamp();
+---------------------+
| current_timestamp() |
+---------------------+
| 2023-08-08 12:43:48 |
+---------------------+
1 row in set (0.00 sec)
  • 获取当前日期时间
mysql> select now();
+---------------------+
| now()               |
+---------------------+
| 2023-08-08 12:44:51 |
+---------------------+
1 row in set (0.00 sec)
  • 在日期的基础上加日期
mysql> select date_add('2020-01-01', interval 12 month) as res;
+------------+
| res        |
+------------+
| 2021-01-01 |
+------------+
1 row in set (0.01 sec)# 当前日期加上7天
mysql> select date_add('2023-08-08', interval 7 day) as res;
+------------+
| res        |
+------------+
| 2023-08-15 |
+------------+
1 row in set (0.00 sec)
  • 在日期的基础上减去时间
mysql> select date_sub('2023-08-08', interval 10 day);
+-----------------------------------------+
| date_sub('2023-08-08', interval 10 day) |
+-----------------------------------------+
| 2023-07-29                              |
+-----------------------------------------+
1 row in set (0.00 sec)
  • 计算两个日期之间相差多少天
mysql> select datediff('2022-6-15', '2022-1-4');
+-----------------------------------+
| datediff('2022-6-15', '2022-1-4') |
+-----------------------------------+
|                               162 |
+-----------------------------------+
1 row in set (0.01 sec)

1.2 案例1

  • 创建生日表
mysql> create table tmp(-> id bigint primary key auto_increment,-> birthday date not null-> );
Query OK, 0 rows affected (0.03 sec)
  • 插入日期
mysql> insert into tmp (birthday) values ('1991-1-1');
Query OK, 1 row affected (0.01 sec)mysql> insert into tmp (birthday) values ('1999-2-1');
Query OK, 1 row affected (0.01 sec)# 可以通过函数插入,插入时间,mysql也会得到日期
mysql> insert into tmp (birthday) values (current_date());
Query OK, 1 row affected (0.00 sec)# 如果插入时间戳,mysql也会自动截取日期部分
mysql> insert into tmp (birthday) values (current_timestamp());
Query OK, 1 row affected, 1 warning (0.00 sec)# 方便观察可以带上date函数
mysql> insert into tmp (birthday) values (date(current_timestamp()));
Query OK, 1 row affected (0.01 sec)mysql> select * from tmp;
+----+------------+
| id | birthday   |
+----+------------+
|  1 | 1991-01-01 |
|  2 | 1999-02-01 |
|  3 | 2023-08-08 |
|  4 | 2023-08-08 |
|  5 | 2023-08-08 |
+----+------------+
5 rows in set (0.00 sec)

1.3 案例2

  • 创建一个留言表
mysql> create table msg(-> id bigint primary key auto_increment,-> content varchar(100) not null,-> sendtime datetime-> );
Query OK, 0 rows affected (0.05 sec)mysql> desc msg;
+----------+--------------+------+-----+---------+----------------+
| Field    | Type         | Null | Key | Default | Extra          |
+----------+--------------+------+-----+---------+----------------+
| id       | bigint(20)   | NO   | PRI | NULL    | auto_increment |
| content  | varchar(100) | NO   |     | NULL    |                |
| sendtime | datetime     | YES  |     | NULL    |                |
+----------+--------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)
  • 插入数据
mysql> insert into msg (content, sendtime) values ('评论1', now());
Query OK, 1 row affected (0.00 sec)mysql> insert into msg (content, sendtime) values ('评论2', now());
Query OK, 1 row affected (0.01 sec)mysql> select * from msg;
+----+---------+---------------------+
| id | content | sendtime            |
+----+---------+---------------------+
|  1 | 评论1   | 2023-08-08 13:29:51 |
|  2 | 评论2   | 2023-08-08 13:29:56 |
+----+---------+---------------------+
2 rows in set (0.00 sec)
  • 查询在5分钟内发布的评论
mysql> select content,sendtime from msg where sendtime > date_sub(now(),interval 5 minute);
+---------+---------------------+
| content | sendtime            |
+---------+---------------------+
| 评论2   | 2023-08-08 13:29:56 |
+---------+---------------------+
1 row in set (0.00 sec)

二、字符串函数

在这里插入图片描述

  • 获取字符集
mysql> select charset('123');
+----------------+
| charset('123') |
+----------------+
| utf8           |
+----------------+
1 row in set (0.00 sec)mysql> select charset(123);
+--------------+
| charset(123) |
+--------------+
| binary       |
+--------------+
1 row in set (0.00 sec)# 获取sendtime的字符集
mysql> select charset(sendtime) from msg;
+-------------------+
| charset(sendtime) |
+-------------------+
| binary            |
| binary            |
+-------------------+
2 rows in set (0.00 sec)
  • 字符串拼接
mysql> select concat('aa', 'bc', '123');
+---------------------------+
| concat('aa', 'bc', '123') |
+---------------------------+
| aabc123                   |
+---------------------------+
1 row in set (0.00 sec)
  • instr(string,substring)返回substring在string中的位置,不存在返回0
mysql> select instr('abcdef', 'bc');
+-----------------------+
| instr('abcdef', 'bc') |
+-----------------------+
|                     2 |
+-----------------------+
1 row in set (0.00 sec)mysql> select instr('abcdef', 'bcf');
+------------------------+
| instr('abcdef', 'bcf') |
+------------------------+
|                      0 |
+------------------------+
1 row in set (0.00 sec)
  • 将字符串转成大写和小写
mysql> select ucase('AaBbCc123');
+--------------------+
| ucase('AaBbCc123') |
+--------------------+
| AABBCC123          |
+--------------------+
1 row in set (0.00 sec)mysql> select lcase('AaBbCc123');
+--------------------+
| lcase('AaBbCc123') |
+--------------------+
| aabbcc123          |
+--------------------+
1 row in set (0.00 sec)
  • 提取步长个字符

left(string2,length)从string2中,向左截取length个字符

mysql> select left('abc', 2);
+----------------+
| left('abc', 2) |
+----------------+
| ab             |
+----------------+
1 row in set (0.00 sec)

right(string2,length)从string2中,向右截取length个字符

mysql> select right('abc', 2);
+-----------------+
| right('abc', 2) |
+-----------------+
| bc              |
+-----------------+
1 row in set (0.00 sec)
  • 求字符串长度
mysql> select length('abcdef');
+------------------+
| length('abcdef') |
+------------------+
|                6 |
+------------------+
1 row in set (0.00 sec)

看一张成绩表:

mysql> select * from exam_result;
+----+--------+---------+------+---------+
| id | name   | chinese | math | english |
+----+--------+---------+------+---------+
|  1 | 张三   |      67 |   98 |      56 |
|  2 | 李四   |      87 |   78 |      77 |
|  3 | 王五   |      88 |   98 |      90 |
|  4 | 赵六   |      82 |   84 |      67 |
|  5 | 田七   |      55 |   85 |      45 |
|  6 | 孙八   |      70 |   73 |      78 |
|  7 | 周九   |      75 |   65 |      30 |
+----+--------+---------+------+---------+
7 rows in set (0.00 sec)
  • 以“XXX的语文是XXX分,数学XXX分,英语XXX分”的方式显示
mysql> select concat('姓名: ', name, ' 语文: ', chinese, ' 数学: ', math, ' 英语: ', english) msg from exam_result;
+-------------------------------------------------+
| msg                                             |
+-------------------------------------------------+
| 姓名: 张三 语文: 67 数学: 98 英语: 56           |
| 姓名: 李四 语文: 87 数学: 78 英语: 77           |
| 姓名: 王五 语文: 88 数学: 98 英语: 90           |
| 姓名: 赵六 语文: 82 数学: 84 英语: 67           |
| 姓名: 田七 语文: 55 数学: 85 英语: 45           |
| 姓名: 孙八 语文: 70 数学: 73 英语: 78           |
| 姓名: 周九 语文: 75 数学: 65 英语: 30           |
+-------------------------------------------------+
7 rows in set (0.00 sec)
  • 将学生表中所有名字中的‘张’的替换成’帅’
mysql> select replace(name, '张', '帅') from exam_result;
+-----------------------------+
| replace(name, '张', '帅')   |
+-----------------------------+
| 帅三                        |
| 李四                        |
| 王五                        |
| 赵六                        |
| 田七                        |
| 孙八                        |
| 周九                        |
+-----------------------------+
7 rows in set (0.00 sec)mysql> select name  from exam_result;
+--------+
| name   |
+--------+
| 张三   |
| 李四   |
| 王五   |
| 赵六   |
| 田七   |
| 孙八   |
| 周九   |
+--------+
7 rows in set (0.00 sec)

注意select配合replace并不会修改原始数据库。

  • 截取学生表中name字段的第二个到第三个字符
mysql> select name,substring(name,2,2) from exam_result;
+-----------+---------------------+
| name      | substring(name,2,2) |
+-----------+---------------------+
| 张三      ||
| 李四      ||
| 王五      ||
| 赵六      ||
| 田七      ||
| 孙八      ||
| 周九      ||
| 曹孟德    | 孟德                |
+-----------+---------------------+
8 rows in set (0.00 sec)
  • 去除字符串左右空格
mysql> select ltrim ('  你好  ');
+----------------------+
| ltrim ('  你好  ')   |
+----------------------+
| 你好                 |
+----------------------+
1 row in set (0.01 sec)mysql> select rtrim ('  你好  ');
+----------------------+
| rtrim ('  你好  ')   |
+----------------------+
|   你好               |
+----------------------+
1 row in set (0.01 sec)mysql> select trim('  你好  ');
+--------------------+
| trim('  你好  ')   |
+--------------------+
| 你好               |
+--------------------+
1 row in set (0.00 sec)

三、数学函数

在这里插入图片描述

  • 基本用法
# 取绝对值
mysql> select abs(-12);
+----------+
| abs(-12) |
+----------+
|       12 |
+----------+
1 row in set (0.00 sec)# 十进制转二进制
mysql> select bin(10);
+---------+
| bin(10) |
+---------+
| 1010    |
+---------+
1 row in set (0.00 sec)# 十进制转16进制
mysql> select hex(10);
+---------+
| hex(10) |
+---------+
| A       |
+---------+
1 row in set (0.00 sec)# 任意进制转换(十进制转三进制)
mysql> select conv(10,10,3);
+---------------+
| conv(10,10,3) |
+---------------+
| 101           |
+---------------+
1 row in set (0.00 sec)# 保留n位小数
mysql> select format(1.23456, 3);
+--------------------+
| format(1.23456, 3) |
+--------------------+
| 1.235              |
+--------------------+
1 row in set (0.00 sec)# 取模
mysql> select mod(10, 3);
+------------+
| mod(10, 3) |
+------------+
|          1 |
+------------+
1 row in set (0.00 sec)# 生成随机数(rand范围0~1)
mysql> select rand() * 100;
+-------------------+
| rand() * 100      |
+-------------------+
| 66.49860438564662 |
+-------------------+
1 row in set (0.00 sec)

四、其他函数

  • 查询当前用户
mysql> select user();
+--------+
| user() |
+--------+
| root@  |
+--------+
1 row in set (0.00 sec)
  • md5(str)对一个字符串进行md5摘要,摘要后得到一个32位字符串

创建表:

mysql> create table user( -> id int unsigned primary key auto_increment,-> name varchar(20) not null, -> password char(32) not null-> );
Query OK, 0 rows affected (0.04 sec)

插入密码

mysql> insert into user (name, password) values ('张三', 123456);
Query OK, 1 row affected (0.00 sec)mysql> select * from user;
+----+--------+----------+
| id | name   | password |
+----+--------+----------+
|  1 | 张三   | 123456   |
+----+--------+----------+
1 row in set (0.00 sec)

在数据库不允许出现明文密码。

需要加密:

mysql> insert into user (name,password) values ('李四',md5('123'));
Query OK, 1 row affected (0.00 sec)mysql> select * from user;
+----+--------+----------------------------------+
| id | name   | password                         |
+----+--------+----------------------------------+
|  1 | 张三   | 123456                           |
|  2 | 李四   | 202cb962ac59075b964b07152d234b70 |
+----+--------+----------------------------------+
2 rows in set (0.00 sec)

我们进行查找也要通过摘要查找。

mysql> select name,password from user where name='李四' and password=md5('123');
+--------+----------------------------------+
| name   | password                         |
+--------+----------------------------------+
| 李四   | 202cb962ac59075b964b07152d234b70 |
+--------+----------------------------------+
1 row in set (0.00 sec)
  • 也可以使用password函数对密码进行加密。
mysql> select password('123');
+-------------------------------------------+
| password('123')                           |
+-------------------------------------------+
| *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 |
+-------------------------------------------+
1 row in set, 1 warning (0.00 sec)
  • 是null返回第二个,不是null返回第一个
mysql> select ifnull(null, 123);
+-------------------+
| ifnull(null, 123) |
+-------------------+
|               123 |
+-------------------+
1 row in set (0.00 sec)mysql> select ifnull(222, 123);
+------------------+
| ifnull(222, 123) |
+------------------+
|              222 |
+------------------+
1 row in set (0.00 sec)

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

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

相关文章

FANUC机器人SRVO-300机械手断裂故障报警原因分析及处理办法

FANUC机器人SRVO-300机械手断裂故障报警原因分析及处理办法 首先,我们查看报警说明书上的介绍: 总结:即在机械手断裂设置为无效时,机器人检测出了机械手断裂信号(不该有的信号,现在检测到了,所以报警) 使机械手断裂设定为无效/有效的具体方法:  按下示教器的MENU菜单…

【LeetCode】数据结构题解(12)[用栈实现队列]

用栈实现队列 😉 1.题目来源👀2.题目描述🤔3.解题思路🥳4.代码展示 所属专栏:玩转数据结构题型❤️ 🚀 >博主首页:初阳785❤️ 🚀 >代码托管:chuyang785❤️ &…

爆肝整理,Postman接口测试-参数关联实战(详细步骤)

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 接口测试什么时候…

Flink源码之JobManager启动流程

从启动命令flink-daemon.sh中可以看出StandaloneSession入口类为org.apache.flink.runtime.entrypoint.StandaloneSessionClusterEntrypoint, 从该类的main方法会进入ClusterEntrypoint::runCluster中, 该方法中会创建出主要服务和组件。 StandaloneSessionClusterEntrypoint:…

tomcat

文章目录 启动目录结构部署原始配置方式一方式二 在idea里配置注解配置 Servlet的执行流程生命周期相关信息其他配置request的各种方法访问页面 启动 下载->bin->点击startup.bat->启动 startup.sh 是Linux下的启动 注意: 需要是配java环境变量 目录结构…

Wav2Lip实践

1. 安装 1.1 安装 conda以指定python版本运行环境 下载:Index of /https://repo.anaconda.com/archive/index.html 1.2 如按旧项目基于python3.6版本对话,会有很多包找不到的情况,经摸索后以python3.9构建成功, conda instal…

IL汇编 ldarg 指令学习

IL汇编代码, .assembly extern mscorlib {} .assembly MathLib {.ver 1 : 0 : 1 : 0 }.module MathLib.dll.namespace MyMath { .class public ansi auto MathClass extends [mscorlib]System.Object{ .method public int32 GetSquare(int32) c…

C++进阶 智能指针

本篇博客简介:介绍C中的智能指针 智能指针 为什么会存在智能指针内存泄露内存泄漏定义内存泄漏的危害如何检测内存泄漏如何避免内存泄漏 智能指针的使用及其原理RAII设计一个智能指针C官方的智能指针 定制删除器智能指针总结 为什么会存在智能指针 我们首先来看下面…

Linux常见命令

新建标签页 (gitee.com)尹相辉 (yinxianghui66) - Gitee.com新建标签页 (gitee.com) 文章目录 文章目录 一、Linux常见命令 1.ls 2.cd 目录名 3.pwd 4.touch 文件名 5.echo 字符串->目标文件 6.cat 文件名 7.man 8.vim 文件名 9.mkdir 目录名 10.rm 文件名 11.mv 源…

WEB集群——负载均衡集群

目录 一、 LVS-DR 群集。 1、LVS-DR工作原理 2、LVS-DR模式的特点 3、部署LVS-DR集群 3.1 配置负载调度器(192.168.186.100) 3.2 第一台web节点服务器(192.168.186.103) 3.3 第二台web节点服务器(192.168.186.…

tui.calender日历在vue中的使用1.0

官网:https://ui.toast.com/tui-calendar github:https://github.com/nhn/tui.calendar/tree/main 月、周、日视图都有,拖拽也比较方便,但是自己用起来比较费劲,参考文档写得不全,做个记录日后方便参考&…

Freemarker:生成HTML文本文件

前置工作参考: Freemarker:基本使用_moreCalm的博客-CSDN博客 1、修改application.yml配置文件 server:port: 8881 #服务端口 spring:application:name: freemarker-demo #指定服务名freemarker:cache: false #关闭模板缓存,方便测试settin…

数据结构----c语言复习

数据结构----c语言复习 一.类型 1.类型的种类 char 1个字节 范围-128~127 short 2个字节 范围-32768~32767 int 4个字节 范围-2147483648~2147483647 long 4个字节 范围-2147483648~2147483647 float 4个字节 有效位为6~7位 float 8个字节 有效位为15~16为 unsigned c…

Jmeter添加cookie的两种方式

jmeter中添加cookie可以通过配置HTTP Cookie Manager,也可以通过HTTP Header Manager,因为cookie是放在头文件里发送的。 实例:博客园点击添加新随笔 https://i.cnblogs.com/EditPosts.aspx?opt1 如果未登录,跳转登录页&#xf…

空地协同智能消防系统——无人机、小车协同

1 题目 1.1 任务 设计一个由四旋翼无人机及消防车构成的空地协同智能消防系统。无人机上安装垂直向下的激光笔,用于指示巡逻航迹。巡防区域为40dm48dm。无人机巡逻时可覆盖地面8dm宽度区域。以缩短完成全覆盖巡逻时间为原则,无人机按照规划航线巡逻。发…

【elementui】解决el-select组件失去焦点blur事件每次获取的是上一次选中值的问题

目录 【问题描述】 【问题摘要】 【分析问题】 【完整Test代码】 【封装自定义指令】 ↑↑↑↑↑↑↑↑↑↑↑↑ 不想看解决问题过程的可点击上方【封装自定义指令】目录直接跳转获取结果即可~~~ 【问题描述】 一位朋友遇到这么一个开发场景:在表格里面嵌入el-…

Hololens2二维码识别

配置 目前大部分Hololens进行二维码识别的开发都是基于ZXing的包完成,首先需要完成zxing.unity.dll,很多地方应该都能下载,也可以直接上github上下载(下载点这里)。 下载时注意一下版本就好,过老的zxing兼…

2023-08-02 LeetCode每日一题(翻转卡片游戏)

2023-08-02每日一题 一、题目编号 822. 翻转卡片游戏二、题目链接 点击跳转到题目位置 三、题目描述 在桌子上有 N 张卡片,每张卡片的正面和背面都写着一个正数(正面与背面上的数有可能不一样)。 我们可以先翻转任意张卡片,…

一位年薪40W的测试被开除,回怼的一番话,令人沉思

一位年薪40W测试工程师被开除回怼道:“反正我有技术,在哪不一样” 一技傍身,万事不愁,当我们掌握了一技之长后,在职场上说话就硬气了许多,不用担心被炒,反过来还可以炒了老板,这一点…

解决 Android Studio 的 Gradle 面板上只有关于测试的 task 的问题

文章目录 问题描述解决办法 笔者出问题时的运行环境: Android Studio Flamingo | 2022.2.1 Android SDK 33 Gradle 8.0.1 JDK 17 问题描述 笔者最近发现一个奇怪的事情。笔者的 Android Studio 的 Gradle 面板上居然除了用于测试的 task 之外,其它什…