当前位置: 首页 > news >正文

MySQL-其他函数(补充)

格式化函数

FORMAT(x, n)

例:将数字x进行格式化,以四舍五入的方式保留n位小数,结果以字符串的形式返回

mysql> select format(12.3456,3),format(2.2,4),format(9.333,0);
+-------------------+---------------+-----------------+
| format(12.3456,3) | format(2.2,4) | format(9.333,0) |
+-------------------+---------------+-----------------+
| 12.346            | 2.2000        | 9               |
+-------------------+---------------+-----------------+
1 row in set (0.00 sec)

不同进制的数字进行转换的函数

CONV()

例:用于不同进制数之间的转换

mysql> select conv('a',16,2),       # 将16进制的a转换为2进制-> conv(15,10,2),                  # 将10进制的15转换为2进制-> conv(15,10,8),                  # 将10进制的15转换为8进制-> conv(15,10,16);                 # 将10进制的15转换为16进制
+----------------+---------------+---------------+----------------+
| CONV('a',16,2) | CONV(15,10,2) | CONV(15,10,8) | CONV(15,10,16) |
+----------------+---------------+---------------+----------------+
| 1010 | 1111 | 17 | F |
+----------------+---------------+---------------+----------------+

IP 地址与数字互相转换的函数

INET_ATON(expr) 、INET_NTOA(expr)

例1:INET_ATON(expr) 用于将网络地址转换为一个代表该地址数值的整数

mysql> select inet_aton('192.168.1.1');
+--------------------------+
| inet_aton('192.168.1.1') |
+--------------------------+
|               3232235777 |
+--------------------------+
1 row in set (0.00 sec)

例2:INET_NTOA(expr)将一个整数转换为网络地址,如果超过10位数值则返回null

mysql> select inet_ntoa('3232235777');
+-------------------------+
| inet_ntoa('3232235777') |
+-------------------------+
| 192.168.1.1             |
+-------------------------+
1 row in set (0.00 sec)

加锁函数和解锁函数

GET_LOCK(str, timeout) 、RELEASE_LOCAK(str) 、 IS_FREE_LOCK(str) 、IS_USED_LOCK(str)

例1:GET_LOCK(str, timeout) 使用字符串 str 来得到一个锁,持续时间 timeout 秒

  1. 若成功得到锁,则返回 1

  1. 若操作超时,则返回 0

  1. 若发生错误,则返回 NULL

mysql> select get_lock('lock1',10);
+----------------------+
| get_lock('lock1',10) |
+----------------------+
|                    1 |        # 返回结果为1,说明成功得到了一个名称为'lock1'的锁,持续时间为10秒
+----------------------+
1 row in set (0.03 sec)

例2:RELEASE_LOCAK(str) 用于解开被 GET_LOCK() 获取的,用字符串 str 所命名的锁

  1. 若锁被解开,则返回 1

  1. 若该线程尚未创建锁,则返回 0

  1. 若命名的锁不存在,则返回 NULL

  1. 若该锁从未被 GET_LOCK() 的调用获取,或锁已经被提前解开,则该锁不存在返回null

mysql> select release_lock('lock1');
+-----------------------+
| release_lock('lock1') |
+-----------------------+
|                     1 |       # 返回值为1说明解锁成功
+-----------------------+
1 row in set (0.00 sec)

例3:IS_FREE_LOCK(str) 检查名为 str 的锁是否可以使用

  1. 若锁可以使用,则返回 1

  1. 若锁正在被使用,则返回 0

  1. 若出现错误,则返回 NULL

mysql> select is_free_lock('lock1');
+-----------------------+
| is_free_lock('lock1') |
+-----------------------+
|                     1 |# 返回值为1说明锁可以使用
+-----------------------+
1 row in set (0.02 sec)

例4:IS_USED_LOCK(str) 用于检查名为 str 的锁是否正在被使用,若被封锁,则返回使用该锁的客户端的连接标识符,否则返回 NULL

mysql> select is_used_lock('lock1');
+-----------------------+
| is_used_lock('lock1') |
+-----------------------+
|                     4 |       # 返回结果为当前连接ID(每台主机返回的不同,可以用CONNECTION_ID()函数查看本机id),表示名称为'lock1'的锁正在被使用
+-----------------------+
1 row in set (0.00 sec)
​
mysql> select is_used_lock('a');
+-------------------+
| is_used_lock('a') |
+-------------------+
|              NULL |
+-------------------+
1 row in set (0.00 sec)

重复执行指定操作的函数

BENCHMARK(count, expr)

例:BENCHMARK(count, expr) 用于重复 count 次执行表达式 expr

  1. 可以用于计算 MySQL 处理表达式的速度

  1. 可以在 MySQL 客户端内部报告语句执行的时间

mysql> select password('new_pass');
+-------------------------------------------+
| password('new_pass')                      |
+-------------------------------------------+
| *B6408F4D32E8BEC631EF224B6F743F3340E6E744 |
+-------------------------------------------+
1 row in set, 1 warning (0.00 sec)          # 执行一次加密用时0.00秒
​
mysql> select benchmark(5000000,password('new_pass'));
+-----------------------------------------+
| benchmark(5000000,password('new_pass')) |
+-----------------------------------------+
|                                       0 |
+-----------------------------------------+
1 row in set, 1 warning (1.12 sec)          # 执行五百万次加密用时1.12秒

改变字符集的函数

CONVERT(... USING ...)

例:用于改变字符串的默认字符集

mysql> select charset('abc');
+----------------+
| charset('abc') |
+----------------+
| utf8           |                  # 默认utf8字符集
+----------------+
1 row in set (0.01 sec)
​
mysql> select charset(convert('abc' using latin1));
+--------------------------------------+
| charset(convert('abc' using latin1)) |
+--------------------------------------+
| latin1                               |    #修改后字符集为latin1
+--------------------------------------+
1 row in set (0.01 sec)

改变数据类型的函数

CAST(x, AS type) 、CONVERT(x, type)

例1:CAST(x, AS type) 用于将一个数据类型的值转换为另一个数据类型的值 CONVERT(x, type) 用于将一个数据类型的值转换为另一个数据类型的值

mysql> select cast(100 as char(2)); # 将整数类型100转换为带有两个显示宽度的字符串类型,结果为'10'

+----------------------+
| cast(100 as char(2)) |
+----------------------+
| 10                   |
+----------------------+
1 row in set, 1 warning (0.01 sec)

例2:CONVERT(x, type) 用于将一个数据类型的值转换为另一个数据类型的值

mysql> select convert(100,char(2));# 将整数类型的100转换为带有两个显示宽度的字符串类型,结果为'10'
+----------------------+
| convert(100,char(2)) |
+----------------------+
| 10                   |
+----------------------+
1 row in set, 1 warning (0.00 sec)
http://www.lryc.cn/news/9767.html

相关文章:

  • MySQL Study Notes Design in 2023
  • C++ 修改防火墙firewall设置(Windows)
  • Spring 入门教程详解
  • day43【代码随想录】动态规划之一和零、完全背包理论基础
  • GEE学习笔记 七十八:干涸的洪泽湖
  • 双指针【灵神基础精讲】
  • tushare量化数据库模块怎么分析?
  • 模型转换 PyTorch转ONNX 入门
  • 【深度学习】激活函数
  • 【新2023】华为OD机试 - 数字的排列(Python)
  • [oeasy]python0085_ASCII之父_Bemer_COBOL_数据交换网络
  • volatile,内存屏障
  • 【ESP 保姆级教程】玩转emqx MQTT篇① —— 系统主题、延迟发布、服务器配置预算、常见问题
  • 第48讲:SQL优化之ORDER BY排序查询的优化
  • [Datawhale][CS224W]图机器学习(三)
  • 2023版最新最强大数据面试宝典
  • CSS 中的 BFC 是什么,有什么作用?
  • 总结在使用 Git 踩过的坑
  • 从 HTTP 到 gRPC:APISIX 中 etcd 操作的迁移之路
  • 【C语言每日一题】——倒置字符串
  • Native扩展开发的一般流程(类似开发一个插件)
  • 【新解法】华为OD机试 - 任务调度 | 备考思路,刷题要点,答疑,od Base 提供
  • Spring3定时任务
  • 数据库版本管理工具Flyway应用研究
  • 更换 Ubuntu 系统 apt 命令安装软件源
  • 2023年可见光通信(LiFi)研究新进展
  • Greenplum的两阶段提交
  • 多元回归分析 | CNN-BiLSTM卷积双向长短期记忆神经网络多输入单输出预测(Matlab完整程序)
  • git命令行推送本地分支到远程仓库
  • 在vscode中使用Typescript并运行