MySQL-函数(3)

举报
大虾好吃吗 发表于 2023/07/20 14:49:51 2023/07/20
【摘要】 六、其他函数 格式化函数FORMAT(x, n)FORMAT(x, n) 将数字 x 格式化,并以四舍五入的方式保留小数点后 n 位,结果以字符串的形式返回mysql> SELECT FORMAT(1.23456, 4), FORMAT(1.2, 4), FORMAT(1.234, 0);+--------------------+----------------+------------...

六、其他函数

格式化函数

FORMAT(x, n)

FORMAT(x, n) 将数字 x 格式化,并以四舍五入的方式保留小数点后 n 位,结果以字符串的形式返回

mysql> SELECT FORMAT(1.23456, 4), FORMAT(1.2, 4), FORMAT(1.234, 0);
+--------------------+----------------+------------------+
| FORMAT(1.23456, 4) | FORMAT(1.2, 4) | FORMAT(1.234, 0) |
+--------------------+----------------+------------------+
| 1.2346 | 1.2000 | 1 |
+--------------------+----------------+------------------+

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

CONV()

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)

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

mysql> SELECT INET_ATON('192.168.1.1');
+--------------------------+
| INET_ATON('192.168.1.1') |
+--------------------------+
| 3232235777 |
+--------------------------+

加锁函数和解锁函数

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

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

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

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

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

mysql> SELECT GET_LOCK('lock1', 10);
+-----------------------+
| GET_LOCK('lock1', 10) |
+-----------------------+
| 1 | # 返回结果为1,说明成功得到了一个名称为'lock1'的锁,持续时间为10+-----------------------+

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

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

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

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

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

mysql> SELECT RELEASE_LOCK('lock1');
+-----------------------+
| RELEASE_LOCK('lock1') |
+-----------------------+
| 1 | # 返回值为1说明解锁成功
+-----------------------+

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

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

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

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

mysql> SELECT IS_FREE_LOCK('lock1');
+-----------------------+
| IS_FREE_LOCK('lock1') |
+-----------------------+
| 1 | # 返回值为1说明锁可以使用
+-----------------------+

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

mysql> SELECT IS_USED_LOCK('lock1');
+-----------------------+
| IS_USED_LOCK('lock1') |
+-----------------------+
| 10 | # 返回结果为当前连接ID,表示名称为'lock1'的锁正在被使用
+-----------------------+-

重复执行指定操作的函数

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

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

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

mysql> SELECT PASSWORD('newpwd');
+-------------------------------------------+
| PASSWORD('newpwd') |
+-------------------------------------------+
| *1FA85AA204CC12B39B20E8F1E839D11B3F9E6AA4 |
+-------------------------------------------+
1 row in set, 1 warning (0.00 sec) # 执行1次加密操作花费了0.00秒
mysql> SELECT BENCHMARK( 500000, PASSWORD('newpwd') );
+-----------------------------------------+
| BENCHMARK( 500000, PASSWORD('newpwd') ) |
+-----------------------------------------+
| 0 |
+-----------------------------------------+
1 row in set, 1 warning (0.16 sec) # 执行500000次加密操作花费了0.16

改变字符集的函数

CONVERT(… USING …)

CONVERT(… USING …) 用于改变字符串的默认字符集

mysql> SELECT CHARSET('abc'); # 默认是utf8字符集
+----------------+
| CHARSET('abc') |
+----------------+
| utf8 |
+----------------+
mysql> SELECT CHARSET(CONVERT('abc' USING latin1)); # 转换成latin1字符集
+--------------------------------------+
| CHARSET(CONVERT('abc' USING latin1)) |
+--------------------------------------+
| latin1 |
+--------------------------------------+

改变数据类型的函数

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

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

mysql> SELECT CAST(100 AS CHAR(2)); # 将整数类型100转换为带有两个显示宽度的字符串类型,结果为'10'
+----------------------+
| CAST(100 AS CHAR(2)) |
+----------------------+
| 10 |
+----------------------+

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

mysql> SELECT CONVERT(100, CHAR(2)); # 将整数类型的100转换为带有两个显示宽度的字符串类型,结果为'10'
+-----------------------+
| CONVERT(100, CHAR(2)) |
+-----------------------+
| 10 |
+-----------------------+
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。